题目描述
小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字(长度不一定,以0结束,最多不超过100个,数字不超过2^32-1),记住了然后反着念出来(表示结束的数字0就不要念出来了)。这对小鱼的那点记忆力来说实在是太难了,你也不想想小鱼的整个脑袋才多大,其中一部分还是好吃的肉!所以请你帮小鱼编程解决这个问题。
输入格式:
一行内输入一串整数,以0结束,以空格间隔。
输出格式:
一行内倒着输出这一串整数,以空格间隔。
输入样例:
3 65 23 5 34 1 30 0
输出样例:
30 1 34 5 23 65 3
方法一:(常规解法)
#include<iostream>
using namespace std;
int main(){
int c,a[110];
while(cin>>a[0]){
for(int i=1;;i++){
cin>>a[i];
if(a[i]==0) break;
c=i;
}
for(int j=c;j>=0;j--){
cout<<a[j]<<" ";
}
cout<<endl;
}
return 0;
}
方法二:(手写栈法)
#include<iostream>
using namespace std;
int a[101];
int top=0,c;
int main(){
while(cin>>c&&c){
top++;
a[top]=c;
}
while(top!=0){
cout<<a[top--]<<" ";
}
return 0;
}
方法三:(STL栈)
#include<iostream>
#include<vector>//STL vector的头文件
using namespace std;
vector<int> a;//定义一个int型的vector
int c;//STL可以完全不用担心数组大小的问题,这个和string类似
int main(){
while(cin>>c&&c){
a.push_back(c);//将括号里的元素压入vector尾部
}
while(!a.empty()){
cout<<a.back()<<" ";//.back()是一个返回vector尾部元素的函数
a.pop_back();//删除vector尾部的元素
}
/*
这一部分输出程序也可以写成:
for(int i=a.size()-1;i>=0;i--){//a.size()返回a中元素的个数
cout<<a[i]<<" ";
}
要注意vector是从a[0]开始存储a.size()个元素,要当心越界访问
*/
return 0;
}
#include<iostream>
#include<stack>//STL stack的头文件
using namespace std;
stack<int> a;//定义一个int型的stack
int c;
int main(){
while(1){
cin>>c;
if(c==0) break;
a.push(c);//将括号里的元素压入stack顶部
}
while(!a.empty()){
cout<<a.top()<<" ";//.top()是一个返回stack顶部元素的函数
a.pop();//删除stack顶部的元素
}
return 0;
}