回 帖 发 新 帖 刷新版面

主题:数组轮转--求优化算法

这是小弟写的一个轮转程序:
          int n[]={7,4,8,9,1,5};
        int i=0,temp1,temp2;//设置了两个中间变量才完成
        
        for(int j=0;j<n.length;++j)
        {
            temp1=n[0];
        for(i=0;i<n.length-1;++i)
        {
            temp2=n[i+1];
            if(i==4)
            {
               n[i+1]=temp1;
               n[0]=temp2;
               break;
            }
            else
            {
                n[i+1]=temp1;
                temp1=temp2;    
            }
        }
        for(i=0;i<n.length;++i)
            System.out.print(n[i]+" ");
         System.out.println();
        }

结果如下:
5 7 4 8 9 1 
1 5 7 4 8 9 
9 1 5 7 4 8 
8 9 1 5 7 4 
4 8 9 1 5 7 
7 4 8 9 1 5 

程序太臃肿,能否简化?(不用指针)

能不能只用一个中间变量,就能完成所需结果?
希望有高手给出优化的算法。

回复列表 (共2个回复)

沙发

在计算注意使用%运算符求余数就可以了,跟本没那么烦!
int const len=6;//你自己的长度
int n[len]={7,4,8,9,1,5};

int main()

for (int i=0;i<len ;i++ )
{
    for (int j=0;j<len ;j++ ) printf("%d ", n[(i+j)%len]);
    printf("\n");
}
return 0;
}

板凳


惭愧,做题的时候没有明白题意!

我来回复

您尚未登录,请登录后再回复。点此登录或注册