7-1 将数组中的数逆序存放 (20 分)
本题要求编写程序,将给定的n个整数存入数组中,将数组中的这n个数逆序存放,再按顺序输出数组中的元素。
输入格式:
输入在第一行中给出一个正整数n(1≤n≤10)。第二行输入n个整数,用空格分开。
输出格式:
在一行中输出这n个整数的处理结果,相邻数字中间用一个空格分开,行末不得有多余空格。
输入样例:
4
10 8 1 2
输出样例:
2 1 8 10
#include
#define MAX 10
int main()
{
int i,n;
int temp;
int a[MAX];
scanf("%d",&n);
for(i=0; i<n; i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<n/2;i++)
{
temp = a[i];
a[i] = a[n-i-1];
a[n-i-1] = temp;
}
printf("%d",a[0]);
for(i=1; i<n; i++)
{
printf(" %d",a[i]);
}
return 0;
}
前面的和后面的交换,所以是n/2
如果是n的话,那么过了一半,又交换,那么等于交换回来了。
看下面的例子:
1 2 3 4 5
i=0交换 15:5 2 3 4 1
i=1交换2 4:5 4 3 2 1
i=2 交换 3自己:5 4 3 2 1
i=3>5/2停止,完成
如果不停止,再交换4 2就成了5 2 3 4 1,再交换1 5成了1 2 3 4 5就回来了
题主应该先知道一件事情:我们利用C语言来进行数组中的数逆序操作,其思想是将数组中最后一个元素和第一个元素进行互换操作,这样一直进行下去,直到我们一直互换到数组的中间元素,此时数组中的所有元素已经全部换了一遍,也就是说我们的循环条件是i<n/2,这个是没有问题的。这个其实是用到了一个折半排序算法的思想。