c++編程在線筆試中遇到多個輸入時的處理案例 -开发者知识库

c++編程在線筆試中遇到多個輸入時的處理案例 -开发者知识库,第1张

1,問題描述。

洗牌在生活中十分常見,現在需要寫一個程序模擬洗牌的過程。 現在需要洗2n張牌,從上到下依次是第1張,第2張,第3張一直到第2n張。首先,我們把這2n張牌分成兩堆,左手拿着第1張到第n張(上半堆),右手拿着第n 1張到第2n張(下半堆)。接着就開始洗牌的過程,先放下右手的最后一張牌,再放下左手的最后一張牌,接着放下右手的倒數第二張牌,再放下左手的倒數第二張牌,直到最后放下左手的第一張牌。接着把牌合並起來就可以了。 例如有6張牌,最開始牌的序列是1,2,3,4,5,6。首先分成兩組,左手拿着1,2,3;右手拿着4,5,6。在洗牌過程中按順序放下了6,3,5,2,4,1。把這六張牌再次合成一組牌之后,我們按照從上往下的順序看這組牌,就變成了序列1,4,2,5,3,6。 現在給出一個原始牌組,請輸出這副牌洗牌k次之后從上往下的序列。 

輸入描述:
第一行一個數T(T ≤ 100),表示數據組數。對於每組數據,第一行兩個數n,k(1 ≤ n,k ≤ 100),接下來一行有2n個數a1,a2,...,a2n(1 ≤ ai ≤ 1000000000)。表示原始牌組從上到下的序列。


輸出描述:
對於每組數據,輸出一行,最終的序列。數字之間用空格隔開,不要在行末輸出多余的空格。

輸入例子:
3
3 1
1 2 3 4 5 6
3 2
1 2 3 4 5 6
2 2
1 1 1 1

輸出例子:
1 4 2 5 3 6
1 5 4 3 2 6
1 1 1 1
2,怎么輸入呢?

對只需要一次輸入的數據,直接cin它,比如輸入例子中的第一行數3,對需要多次輸入的形式相同的數據,用循環輸入方式輸入。

比如輸入例子中的第二行和第三行可看成一組數據,下邊的數據都是這一組數據形式的重復輸入。所以可循環輸入。

3,怎么輸出呢?

既然有多次相同形式的數據輸入,所以在每一組數據輸入后,就直接處理,然后輸出。

具體代碼:

#include <iostream>
using namespace std;
void sorting(int *a,int length)
{
if (a == NULL || length <= 0)return;
int *L = new int[length/2];
int *R = new int[length/2];
for (int i = 0; i < length/2; i)
{
L[i] = a[i];
}
for (int i = length/2; i < length; i)
{
R[i - length/2] = a[i];
}
for (int i = 0, j = 0; i < length/2 && j < length; i,j = j 2)
{
a[j] = L[i];
a[j 1] = R[i];
}
}
void Ksort()
{
int T;
cin >> T;//一個數據,直接輸入
int n, k;
while (cin >> n){//while循環執行一次就是輸入一組數據,然后對這組數據處理,輸出結果
cin >> k;
int *a = new int[2*n];
for (int i = 0; i < 2*n; i)
{
cin >> a[i];
}
for (int i = 0; i < k; i)
{
sorting(a, 2*n);
}
for (int i = 0; i < 2*n - 1; i)//注意輸出結果的格式
{
cout << a[i] << ' ';
}
cout << a[2*n - 1];
cout << endl;
}
}
int main()//注意main函數的書寫
{
Ksort();
return 0;
}

以后遇到新的輸入格式,再補充!!

最佳答案:

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复