1. 程式人生 > >藍橋杯 演算法提高 ADV-103 逆序排列 迴圈語句 陣列操作

藍橋杯 演算法提高 ADV-103 逆序排列 迴圈語句 陣列操作

演算法提高 逆序排列
時間限制: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

分析:和字串逆置相似,取頭尾指標 l e f t , r i g

h t left, right ,while迴圈交換兩個數的位置,迴圈條件為 l e f t
< r i g h t left < right
,程式碼如下:

#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;
}