永发信息网

将一维数组a中的元素循环右移3次,如a[ ]={1,2,3,4,5},循环右移3次后a[ ]={3,4,5,1,2},如何编写程序?

答案:2  悬赏:0  手机版
解决时间 2021-08-13 22:33
  • 提问者网友:且恨且铭记
  • 2021-08-13 00:19
将一维数组a中的元素循环右移3次,如a[ ]={1,2,3,4,5},循环右移3次后a[ ]={3,4,5,1,2},如何编写程序?
最佳答案
  • 五星知识达人网友:迷人又混蛋
  • 2021-08-13 01:31

以你的例子写了个. 如果需要修改请追问.


#include <stdio.h>


void main()
{
int a[]={1,2,3,4,5}; //整形数组在定义时就必须确定长度.
int i,j,t,n=3; //n是右移的次数.


while(n--) //每次都将最后一个元素先拿出来.然后把前面的依次后移.
{
t=a[4];
for(j=4;j;j--) //数组元素依次后移.
{
a[j]=a[j-1];
}
a[j]=t; //最后把之前拿出来的最后一个元素放到数组的首位中.
}


for(i=0;i<5;i++) //输出
printf("%d ",a[i]);
}


运行时截图:


全部回答
  • 1楼网友:第四晚心情
  • 2021-08-13 01:54

//最高效的右移算法!! //这个是递归的写法 //author:tengzhao201 QQ:715572192 //time:2010-4-24 //时间复杂度为O(n),空间复杂度O(1),交换点在中间时比逆序法快一倍!!! void TZshift1(long a[],long N,long K) {  K=K%N;

 if(0==K)return;

 long temp,qq,pp=0;  pp=0;qq=K;  for(long i=0;i<N-K;i++,pp++,qq++)  {   //swap(a[i%K],a[i+K]);问题的关键在于找到原来的第i个元素现在在哪里,通过观察可以发现在a[i%K]的位置上,下面的代码实现了a[i%K]和a[i+K]的互换   if(K==pp)pp=0;   temp=a[pp];   a[pp]=a[qq];   a[qq]=temp;  }

 TZshift1(a,K,K-pp); }

//最高效的右移算法!! //非递归的写法 //author:tengzhao201 QQ:715572192 //time:2010-4-24 //时间复杂度为O(n),空间复杂度O(1),交换点在中间时比逆序法快一倍!!! void TZshift0(long a[],long N,long K) {  K=K%N;  if(0==K)   return;

 //long count=0;  long temp,qq,pp=0;

 while(K>0)  {   pp=0;qq=K;   for(long i=0;i<N-K;i++,pp++,qq++)   {    //swap(a[i%K],a[i+K]);问题的关键在于找到原来的第i个元素现在在哪里,通过观察可以发现在a[i%K]的位置上,下面的代码实现了a[i%K]和a[i+K]的互换

   if(K==pp)pp=0;    temp=a[pp];    a[pp]=a[qq];    a[qq]=temp;    //count+=2;   }   N=K;   if(0==pp)    return;   K-=pp;   //TZshift(a,K,K-pp);  }  //cout<<"In tatal,has used "<<count<<" steps."<<endl; }

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯