gpt4 book ai didi

c - 如何循环移动n个位置的数组

转载 作者:太空宇宙 更新时间:2023-11-04 02:44:36 24 4
gpt4 key购买 nike

#include <stdio.h>
#include <stdlib.h>
#define MAX 10

int main()
{
int niz[MAX], i, pom;


// two more var, n,m=0;

char c;

for(i=0;i<MAX;i++)
{
niz[i]=rand()%100;
}
for(i=0;i<MAX;i++)
{
printf("%d\n", niz[i]);
}


printf("\n\nEnter L(l) for left shift or R(r) for right shift\n");
scanf("%c", &c);

if(c=='L' || c=='l')
{

//while(m<n) and on the end n++; or for(m=0;m<n;m++)... you know what i mean
//but its not working...


pom=niz[0];
for(i=0;i<MAX-1;i++)
{
niz[i]=niz[i+1];
}
niz[MAX-1]=pom;


//for loop to shift array for 1 position
}

else if(c=='R' || c=='r')
{

//.....

pom=niz[MAX-1];
for(i=MAX-1;i>0;i--)
{
niz[i]=niz[i-1];
}
niz[0]=pom;
//for loop to shift array for 1 position
}

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

好的,这是将数组向左或向右移动 1 个位置的代码,它工作正常。但是如果我想移动 n 个位置的数组,我的第一个想法是可以将来自 IF 和 ELSE IF 的代码放在一个循环中,这将重复直到某个变量增加到小于 n,我尝试将来自 IF 和 ELSE IF 的代码放入while 和 for 循环,但它不起作用。顺便说一句,除了我将数组移动 n 个位置的方式之外,还有其他选择吗?

最佳答案

我的基本想法是复制原始数组,然后根据移位索引将数组元素设置到副本中。在获得 n 的值和移动方向(以及任何错误检查)之后,这是我的方法:

if(toupper(c)=='L')
{
n = -n;
}

for(i=0;i<MAX;i++)
{
copy[i] = niz[i];
}

for(i=0;i<MAX;i++)
{
shift_i = (i+n+MAX) % MAX;
niz[i]=copy[shift_i];
}

由于 n 可能为负数,我在取模之前将数组的长度添加到它。就地轮类会更有效率,但我还没有弄清楚。您需要以某种方式跟踪原始值。

关于c - 如何循环移动n个位置的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28639441/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com