P1427

P1427

题目描述

小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字(长度不一定,以0结束,最多不超过100个,数字不超过2^32-1),记住了然后反着念出来(表示结束的数字0就不要念出来了)。这对小鱼的那点记忆力来说实在是太难了,你也不想想小鱼的整个脑袋才多大,其中一部分还是好吃的肉!所以请你帮小鱼编程解决这个问题。

输入输出格式

输入格式:

 

一行内输入一串整数,以0结束,以空格间隔。

输出格式:

 

一行内倒着输出这一串整数,以空格间隔。

输入输出样例

输入样例:

3 65 23 5 34 1 30 0

输出样例:

30 1 34 5 23 65 3

提供以下几种做法:

1. 常规做法:反向遍历

#include<iostream>
using namespace std; 
int x[100],c=0;
int main(){
    for(int i=0;;i++){
        cin>>x[i];
        if(x[i]==0) break; 
        c=i;
    }
    for(int j=c;j>=0;j--)
    cout<<x[j]<<" ";
    return 0;
}

2. 栈

  栈是NOIP里的一种必会的基础数据结构,结构简单功能强大。栈的基本思想是先进后出,后进先出。利用栈的这个特性往往可以完成一些意想不到的操作。栈的一个用途就是将一串数据反向输出。

  ①手打栈

  栈的实现比较简单,只需要开一个空数组,然后用一个top变量表示栈顶元素的位置即可。

  入栈就将top++,然后将栈顶元素赋值即可。出栈只需top--,连清零都不用。下面就是一段手打栈解法代码:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int a[101];
 4 int top=0,c;
 5 int main(){
 6     while(1){
 7         cin>>c;
 8         if(c==0)break;
 9         a[++top]=c;
10     }
11     while(top!=0){
12         cout<<a[top--]<<" ";
13     }
14     return 0;
15 }

  ②STL栈(C++)

  直接调用STL里和栈有关的函数。

  代码如下:

  用vector

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 vector<int> a;//定义一个int型的vector 
 4 int c;
 5 int main(){
 6     while(1){
 7         cin>>c;
 8         if(c==0)break;
 9         a.push_back(c);//将括号里的元素压入vector尾部 
10     }
11     while(!a.empty()){
12         cout<<a.back()<<" ";//.back()是一个返回vector尾部元素的函数 
13         a.pop_back();//删除vector尾部的元素
14     }
15     /*
16     这一部分输出程序也可以写成:
17     for(int i=a.size()-1;i>=0;i--){//a.size()返回a中元素的个数
18         cout<<a[i]<<" ";
19     }
20     要注意vector是从a[0]开始存储a.size()个元素,要当心越界访问
21     */
22     return 0;
23 } 

  用stack

  stack与vector类似,但是函数名称简洁了不少,而且省去了一些对于栈无用的冗杂的函数。

  代码如下:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 stack<int> a;//定义一个int型的stack 
 4 int c;
 5 int main(){
 6     while(1){
 7         cin>>c;
 8         if(c==0)break;
 9         a.push(c);
10     }
11     while(!a.empty()){
12         cout<<a.top()<<" ";
13         a.pop();
14     }
15     return 0;
16 }

猜你喜欢

转载自www.cnblogs.com/fangxiaoqi/p/10367107.html