gpt4 book ai didi

c - 在 C 中移动一个数字序列?

转载 作者:太空宇宙 更新时间:2023-11-03 23:27:34 24 4
gpt4 key购买 nike

我有一个问题,关于一些人试图环绕我试图在 C 编程语言中移动的数字序列。在我通过循环计算的数字序列中找到的第一个值最终被丢弃。这是代码现在的样子:

numbers[d] = numbers[x];
for (d = y-1; d >=0; d --){
numbers[d] = numbers[(d - 1) % y];
printf(" numbers[d] = %d \n", numbers[d]);
}

这是我从之前的循环中计算出的数字[x]:

1, 17, 3, 15, 14, 6, 12, 8, 10

这是数字[d] 目前的样子:

17, 3, 15, 14, 6, 12, 8, 10, 10

...它应该是这样的:

17, 3, 15, 14, 6, 12, 8, 10, 1

它似乎并没有将 1 绕到最后。我的循环中是否缺少条件?谢谢!

最佳答案

让我们分析您的 for 循环,去掉 printf 语句。

for (d = y-1; d >=0; d --){
numbers[d] = numbers[(d - 1) % y];
}

在开始循环之前,numbers 中有以下值。

1, 17, 3, 15, 14, 6, 12, 8, 10

y 的值为9

在循环的第一次迭代中,d = 8(d-1)%y = 7。您将 number[8] 的值替换为 number[7]。数组变为:

1, 17, 3, 15, 14, 6, 12, 8, 8

在循环的下一次迭代中,d = 7(d-1)%y = 6。您将 number[7] 的值替换为 number[6]。数组变为:

1, 17, 3, 15, 14, 6, 12, 12, 8

当您到达 d=1 的迭代时,(d-1)%y = 0。您将 number[1] 的值替换为 number[0]。数组变为:

1, 1, 17, 3, 15, 14, 6, 12, 8

在下一次迭代中,d=0(d-1)%y = -1。声明

 numbers[d] = numbers[(d -  1) % y];

相当于

 numbers[0] = numbers[-1];

这肯定会导致未定义的行为,但它不能解释输出中的其他数字。也许您发布的输出对应于不同的代码块。

我认为@JonathanLeffler 的回答为您的算法问题提供了解决方案。在此不再赘述。

关于c - 在 C 中移动一个数字序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23164869/

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