用于移位数组中元素的程序(未获得正确的输出)

时间:2017-01-22 15:04:04

标签: c

我正在尝试针对以下问题制作一个c程序:

  

给定一组存储在数组中的元素和一个数字'm',设计一个算法并编写后续的C程序,以按'm'位置执行数组的循环右移。例如,如果元素是12,13,16,7,10和m = 2,那么结果集将是7,10,12,13,16。

     

输入格式

     

集合中的元素数量:'n'
  元件-1
  元件-2
  ...
  元件 - 正
  'm'的价值

     

输出格式

     

右移'm'后的集合中的元素

我写的程序如下。

#include<stdio.h>

main()
{
 int n,i,j,m,temp1,temp2;

printf("Given n:\n");
scanf("%d", &n);

int array[n];

printf("Enter the elements\n");

for (i = 0;i<n;i++)
{
    scanf("%d", &array[i]);
}

printf("Enter the shifts needed\n");
scanf("%d", &m);

for(i = 0;i<m;i++)
{
    for(j=0;j<3;j++)
    {
        temp1 = array[j+1];
        array[j+1] = array[j];
        temp2 = array[j+2];
        array[j+2] = temp1;
        temp1 = array[j+3];
        array[j+3] = temp2;
        array[j] = temp1;
    }
}

for (i = 0;i<n;i++)
{
    printf("%d\t", array[i]);
}
}

输出与输入的数字相同。

任何人都可以帮我吗?

1 个答案:

答案 0 :(得分:1)

好吧,你可以创建一个新的数组来移动数字,这样你就不会对temps感到困惑并简化你的代码:

int new_array[n];

for(int i=0;i<n;i++){
  new_array[(i+m)%n]=array[i];
}