信息学奥赛一本通 2034:【例5.1】反序输出

【题目链接】

ybt 2034:【例5.1】反序输出

【题目考点】

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 
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 
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;
} 

你可能感兴趣的:(信息学奥赛一本通题解,c++)