【题目链接】
【题目考点】
1. 数组填充
设数组a, 变化的下标ai,初值为0
例: int a[105], ai = 0;
方法1:填充到下标0~ai-1
将数值x填到数组中:a[ai++] = x;
ai表示:数组长度(数组中元素的个数),数组待填充的位置。
正向遍历写法:for(int i = 0; i < ai; ++i)
方法2:填充到下标1~ai
将数值x填到数组中:a[++ai] = x;
ai表示:数组长度(数组中元素的个数),数组最后一个元素的位置。
正向遍历写法:for(int i = 1; i <= ai; ++i)
2. 逆序遍历数组
3. 输入不确定个数的数字
while(cin >> a)
{
//...
}
或
while(scanf("%d", &a) != EOF))
{
//...
}
OJ上实际是从文件输入,文件末尾是EOF(end of file,实际是-1)。当读到文件末尾时cin >> a
会返回false,scanf("%d", &a)
会返回EOF,让循环跳出。
这样的程序在本地调试时,输入n个数据后不会停止。此时可以按Ctrl+Z
,控制台中出现^Z
后,按回车,这样可以结束输入,看到程序运行的结果。
【题解代码】
解法1:填充到下标0~n-1
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a[105], ai = 0, x;
while(cin >> x)
a[ai++] = x;
for(int i = ai - 1; i >= 0; --i)
cout << a[i] << ' ';
return 0;
}
解法2:填充到下标1~n
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a[105], ai = 0, x;
while(cin >> x)
a[++ai] = x;
for(int i = ai; i >= 1; --i)
cout << a[i] << ' ';
return 0;
}