c语言、c+±-逆序输出 洛谷:P1427 小鱼的数字游戏
简介
要求:输入0停止输出、逆序输出除0的数组
思路:循环连续输入、注意截至条件、逆序遍历数组
实现路径:数组遍历、栈
一、小鱼的数字游戏
题目描述
小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字 a i a_i ai(长度不一定,以 0 0 0 结束),记住了然后反着念出来(表示结束的数字 0 0 0 就不要念出来了)。这对小鱼的那点记忆力来说实在是太难了,你也不想想小鱼的整个脑袋才多大,其中一部分还是好吃的肉!所以请你帮小鱼编程解决这个问题。
输入格式
一行内输入一串整数,以 0 0 0 结束,以空格间隔。
输出格式
一行内倒着输出这一串整数,以空格间隔。
样例 #1
样例输入 #1
3 65 23 5 34 1 30 0
样例输出 #1
30 1 34 5 23 65 3
提示
数据规模与约定
对于 100 % 100\% 100% 的数据,保证 0 ≤ a i ≤ 2 31 − 1 0 \leq a_i \leq 2^{31} - 1 0≤ai≤231−1,数字个数不超过 100 100 100。
二、代码展示
C语言版
//注意下标
//数组逆序输出
#include <stdio.h>
int main() {
int i,j,len;
int arr[105];
i = 0; //下标从0开始
while(scanf("%d",&arr[i])) {
i++; //数据录入完成后又+1
if(arr[i-1]==0) //所以要在i++的基础上 减 1 才能定位到最后一位元素
break;
}
len = i - 2; //找到倒数第二个元素下标位置
for( i = len; i >= 0; i-- ) {
printf("%d ",arr[i]);
}
return 0;
}
C++版
//记忆结构:(先进先出)栈;遇到0停止输出
#include <iostream>
#include <stack>
using namespace std;
int main()
{
stack<int> s;
int a;
while(true){
cin >> a;
if(a==0) break; //遇到0停止输出
s.push(a);
}
while(s.size()>0){
cout << s.top()<<" ";
s.pop();
}
}
运行结果展示
3 65 23 5 34 1 30 0
30 1 34 5 23 65 3
小结
循环时注意边界条件、下标;对while循环掌握不熟练,后续继续加强!