我正在尝试针对以下问题制作一个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]);
}
}
输出与输入的数字相同。
任何人都可以帮我吗?
答案 0 :(得分:1)
好吧,你可以创建一个新的数组来移动数字,这样你就不会对temps感到困惑并简化你的代码:
int new_array[n];
for(int i=0;i<n;i++){
new_array[(i+m)%n]=array[i];
}