#2887. 例8:小鱼的数字游戏

例8:小鱼的数字游戏

说明

小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字 ai(长度不一定,以数字 0 结束,总长度不超过 100),记住了然后反着念出来(不包括结束标志 0)。请帮小鱼解决这个问题。

输入格式

输入只有一行,为一系列正整数,数字之间用空格隔开。最后一个数字是 0,表示输入结束。0 不计入需要反着念的数字序列。

输出格式

输出一行,为输入中除最后一个 0 之外的所有数字,按输入顺序的逆序排列,数字之间用一个空格隔开。
3 65 23 5 34 1 30 0
30 1 34 5 23 65 3

提示

1. 与例7的区别:本题的核心难点在于输入的数字个数 n 是未知的,需要根据结束标志 0 来动态确定。这要求我们使用一种灵活的读入方式,例如 do-while 循环,持续读入数字直到遇到 0。 2. 数据处理逻辑:在存储时,通常从 a[1] 开始存储有效数字。读入过程结束后,变量 n 记录了包括结束符 0 在内的总数字个数。因此,需要执行 n-- 操作,将 n 的值修正为实际需要输出的有效数字个数。 3. 输出方法:获得有效数字个数后,使用 for 循环从 i = n 到 i = 1 进行逆序遍历并输出 a[i],即可实现“反着念”的要求。 4. 数据范围:对于 100% 的数据,数字序列的长度(不包括最后的 0)不超过 100。因此,定义数组时大小应略大于此值,例如 int a[110];。 5. 关键代码模式: * 使用 do-while 循环读入并计数:do { cin >> tmp; a[++n] = tmp; } while (tmp != 0); * 修正计数(去掉末尾的0):n--; * 逆序输出有效数字:for (int i = n; i >= 1; i--) cout << a[i] << " ";

来源

一维数组例题