藍橋杯 演算法提高 ADV-103 逆序排列 迴圈語句 陣列操作
阿新 • • 發佈:2019-01-05
演算法提高 逆序排列
時間限制:1.0s 記憶體限制:512.0MB
問題描述
編寫一個程式,讀入一組整數(不超過20個),並把它們儲存在一個整型陣列中。當用戶輸入0時,表示輸入結束。然後程式將把這個陣列中的值按逆序重新存放,並打印出來。例如:假設使用者輸入了一組資料:7 19 -5 6 2 0,那麼程式將會把前五個有效資料儲存在一個數組中,即7 19 -5 6 2,然後把這個陣列中的值按逆序重新存放,即變成了2 6 -5 19 7,然後把它們打印出來。
輸入格式:輸入只有一行,由若干個整陣列成,中間用空格隔開,最末尾的整數為0。
輸出格式:輸出也只有一行,即逆序排列後的整數,中間用空格隔開,末尾沒有空格。
輸入輸出樣例
樣例輸入
7 19 -5 6 2 0
樣例輸出
2 6 -5 19 7
分析:和字串逆置相似,取頭尾指標
,while迴圈交換兩個數的位置,迴圈條件為
,程式碼如下:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int num;
vector<int> a;
int right, left;
cin >> num;
while(num) //迴圈輸入,遇到0跳出迴圈
{
a.push_back(num);
cin >> num;
}
//頭尾指標初始化
left = 0, right = a.size() - 1;
//迴圈交換位置
while(left < right)
{
a[left] = a[left] ^ a[right];
a[right] = a[left] ^ a[right];
a[left] = a[left] ^ a[right];
left++, right--;
}
//使用迭代器輸出動態陣列中的元素
for(vector<int>::iterator it = a.begin(); it != a.end(); it++)
{
cout << *it << " ";
}
return 0;
}