ZZULIOJ题解
1114: 逆序
题目描述
输入n(1<=n<=10)和n个整数,逆序输出这n个整数。
输入
输入n(1<=n<=10),然后输入n个整数。
输出
逆序输出这n个整数,每个整数占4列,右对齐。
样例输入
6
4 5 6 1 2 3
样例输出
3 2 1 6 5 4
本题当然可以用之前的递归解决,不过也可以跟递归说再见,迈向新的起点,数组的学习啦。这里关于数组的定义其实是建议放在main函数之外的,因为会节省程序运行时间,这里就不得不提一下为什么会出现这种情况,因为,全局变量在静态存储区分配内存,局部变量是在栈上分配内存空间的。(c语言程序在运行时会动态创建一个堆栈段,里面存放着调用栈,保存着函数的调用关系和局部变量。)如果数组太大,可能会造成栈溢出。所以这样来说,我们把数组定位全局变量是很有必要的。一是防止了栈溢出,二是节省了动态创建的时间~而且防止溢出这个操作,对于代码来说也是很必要的,因此对于要求100的数组,我们一般是要开辟101甚至105的空间的,这就是防止溢出,那么话不多说,开始咱们的解题。
代码
#include<stdio.h>
int a[11];//注意啦数组初始是从0开始,例如int a[3]其实是里面是a[0]、a[1]、a[2]
//并且在外面定义是默认初始化数组值为0的,定义数字也是一样的~
int main()
{
int i,n;//定义循环变量i和数组元素数n
scanf("%d",&n);//输入n
//int a[n];//定义数组a[n],这里数字比较小,所以可以这样。 但是并不推荐,所以划掉
for(i=0;i<n;i++)//开始循环 ,从0开始
scanf("%d",&a[i]);//每次存入a[i]
for(i=n-1;i>-1;i--)//从n-1到0结束
printf("%4d",a[i]);//按照格式要求输出占4列右对齐的数字
return 0;//程序正常结束
}
//前边的递归方法是可以解决这个问题的
/*
void inverse(int n)
{
int num;//定义数字num
if(n>1)
{
scanf("%d",&num);//键盘读入num
inverse(n-1);//递归给n-1 -->此时又进入了一个新的inverse()函数之中,重复操作
printf("%4d",num);//输出num
}
if( n == 1){//当n为1的时候,输入之后就输出
scanf("%d",&num);//键盘读入num
printf ("%4d",num);//直接输出num;
}
}
int main()
{
int n;//定义未知数数量n
scanf("%d",&n);//键盘输入n
inverse(n);//执行inverse函数
return 0;//程序正常结束
}
*/