1 条题解
-
0
思路与算法
原题输入直接是一行整数,没有开头的个数。读到EOF为止,将每个整数的十进制文本依次放入数组,再从最后一项向第一项输出。使用文本保存整数,既不需要数值运算,也不会擅自限制原题未给出的数值位数。
正确性说明
读入后第i个数组元素就是第i个输入数的原始十进制表示。逆向遍历依次输出第n项、第n-1项,直至第1项,因此与输入顺序正好相反,且每项只出现一次。所有数据项都读到EOF,不会把首项误当作数量丢弃。
复杂度
设共有n≤100个数、输入十进制文本总长为B。读入、复制和输出总时间O(B+n),存储所有文本O(B+n)。空数组初始化O(1),动态数组扩容的摊还开销包含在内。
易错点
与常见“先给n再给数组”的题协议不同,不能先cin>>n。负号属于数值文本的一部分,逆序的是元素而不是每个数字的字符。输出元素之间一个空格,最后换行。库内P0308只接受1至10^4正数,本题未限整数值,故保留这个完整输入域版本。
参考代码(C++11)
#include <bits/stdc++.h> using namespace std; int main() { vector<string> a; string x; while (cin >> x) a.push_back(x); for (size_t i = a.size(); i > 0; --i) cout << a[i - 1] << (i == 1 ? '\n' : ' '); }
- 1