当前位置: 代码迷 >> C语言 >> 逆序重放的问题
  详细解决方案

逆序重放的问题

热度:237   发布时间:2006-12-05 10:50:38.0
逆序重放的问题
将一个数组中的值按逆序重新存放。eg:input 1,2,3,4,5,6 output:6,5,4,3,2,1
我编的这个为什么不能达到我要的结果呢?
#include<stdio.h>
{
main()
int a[6],i;
for(i=0;i<=5;i++)
scanf("%d",&a[i]);
for(i=5;i>=0;i--)
printf("%3d",&a[i]);
}

[此贴子已经被作者于2006-12-5 10:51:27编辑过]

搜索更多相关的解决方案: 逆序  

----------------解决方案--------------------------------------------------------
你这样是把他反序输出来了,并没有对实际的数组进行反序存放.你看看这样是不是你要的答案.
#include<stdio.h>
{
main()
int a[6],i,j;
for(i=0;i<=5;i++)
scanf("%d",&a[i]);
for(i=0,j=5;i<=5;i++,j--)
{
a[i]=a[i]+a[j];
a[j]=a[i]-a[j];
a[i]=a[i]-a[j];
printf("%3d",&a[i]);
}
}

----------------解决方案--------------------------------------------------------
以下是引用yelang7在2006-12-5 11:16:02的发言:
你这样是把他反序输出来了,并没有对实际的数组进行反序存放.你看看这样是不是你要的答案.
#include<stdio.h>
main()
{int a[6],i,j;
for(i=0;i<=5;i++)
scanf("%d",&a[i]);
for(i=0,j=5;i<=5;i++,j--)
{
a[i]=a[i]+a[j];
a[j]=a[i]-a[j];
a[i]=a[i]-a[j];
printf("%3d",&a[i]);
}
}

第二个FOR语句的算法是怎么得出来的啊?
我输入1,2,3,4,5,6
结果是:―22―20―18―16―14―12―(中间那些横线也是输出的)


----------------解决方案--------------------------------------------------------

#include<stdio.h>
#include <fstream>
using namespace std;

main()
{


int a[6],i,j;
int temp;

for(i=0;i<6;i++)
scanf("%d",&a[i]);

for(i=5,j=0;i>(6/2-1);i--,j++)
{ temp=a[i];
a[i]=a[j];
a[j]=temp;

//printf("%3d",a[j]);
}

for(i=0;i<6;i++)
printf("%3d\n",a[i]);

}


----------------解决方案--------------------------------------------------------
以下是引用linsq在2006-12-5 10:50:38的发言:
将一个数组中的值按逆序重新存放。eg:input 1,2,3,4,5,6 output:6,5,4,3,2,1
我编的这个为什么不能达到我要的结果呢?
#include<stdio.h>
/* { */
main() {
int a[6],i;
for(i=0;i<=5;i++)
scanf("%d",&a[i]);
for(i=5;i>=0;i--)
printf("%3d",a[i]);
}


----------------解决方案--------------------------------------------------------
改的程序在楼上

注意:输出时无须写 '&';
函数括号在函数名,函数参数后;
----------------解决方案--------------------------------------------------------

啊?呵呵,太粗心了....


----------------解决方案--------------------------------------------------------
以下是引用溪水在2006-12-5 12:02:34的发言:

#include<stdio.h>
#include <fstream>
using namespace std;

main()
{


int a[6],i,j;
int temp;

for(i=0;i<6;i++)
scanf("%d",&a[i]);

for(i=5,j=0;i>(6/2-1);i--,j++)
{ temp=a[i];
a[i]=a[j];
a[j]=temp;

//printf("%3d",a[j]);
}

for(i=0;i<6;i++)
printf("%3d\n",a[i]);

}

这个算法妙,利用对称交换。

但是假如是输入的个数是单数的话,就要改一下了。谢了。


----------------解决方案--------------------------------------------------------

有那必要吗?


----------------解决方案--------------------------------------------------------
对不起,上面写错了个地方,请原谅下........
main()
int a[6],i,j;
for(i=0;i<=5;i++)
scanf("%d",&a[i]);
for(i=0,j=5;i<=5;i++,j--)
{
a[i]=a[i]+a[j];
a[j]=a[i]-a[j];
a[i]=a[i]-a[j];
}
for(i=0;i<=5;i++)
printf("%3d",&a[i]);

i<=5 改为 i<(j+1)/2 就没有问题的了.

----------------解决方案--------------------------------------------------------
  相关解决方案