author:&Carlton
tag:递归,栈
topic:【NOIP】小鱼的数字游戏题解
language:C++
website:洛谷
date:2023年7月29日
目录
我的题解思路
题目要求的数据很弱:
①数字大小范围小,int范围够
②数字数量少,有限数量用静态数组可以简单表示
所以用数组存储数据,然后逆序输出即可。
源代码
#include <iostream>
using namespace std;
int main()
{
int a[100]={0}; //最多有100个数字输入,初始化数组
int sign,i,j;
for(i=0;i<100;i++)
{
cin >> sign;
//如果不为0则存入数组
if(sign)
{
a[i]=sign;
}
else
{
break;
}
}
for(j=99;j>=0;j--)
{
//如果为有效数字则打印输出
if(a[j])
{
cout << a[j] << " ";
}
else
{
continue;
}
}
}
优化
在结束break时可以记录当前数组位置,逆序输出时在标记处开始。
别人的优秀思路:
要求数据后进先出,套用数据结构栈解决问题。
empty()判断栈是否为空
push(x)把x压入栈
top()返回栈顶元素
pop()弹出栈顶第一个元素
#include <bits/stdc++.h>
using namespace std;
int main(){
stack<int> s;//定义一个栈
while (1){
int a;
scanf("%d",&a);
if (!a) break;//判断是否结束
s.push(a);//将a压入栈
}
while (!s.empty()){
cout<<s.top();//输出栈顶元素
printf(" ");
s.pop();//栈顶第一个元素出战
}
cout<<"\n";//换行别理它=-=
return 0;
}
欢迎指正与分享,谢谢!