gpt4 book ai didi

c++ - 在数组中查找重复模式

转载 作者:行者123 更新时间:2023-11-28 01:28:26 25 4
gpt4 key购买 nike

在以 1,9,9,0,9,7,5,1 开头的数组中,第 4 个数字之后的每个数字是前 4 个数字之和的最后一位数字 ( 1 + 9 + 9 + 0 = 19, 9 是下一个数字), 计算模式 1,9,9,0 何时会在数组中再次出现。我在查找模式时遇到问题,这是我当前的代码。

#include <iostream>
using namespace std;

int main()
{
int n[500];
n[0]=1,n[1]=9,n[2]=9,n[3]=0,n[4]=9;
int suma,i=5,b=0,c=0;
do
{
b=i;
suma=0;
suma=suma+(n[i-1]+n[i-2]+n[i-3]+n[i-4]);
n[i]=suma%10;
cout << n[i] << "::" << endl;
if(n[i-1]==0 && n[i-2]==9 && n[i-3]==9 && n[i-4]==1)
{
cout << "break"; break;
}
i++;
}while(i!=1000);
return 0;
}

最佳答案

您的代码的唯一问题是您越界访问数组。你的数组是

int n[500];

然后循环直到

}while(i!=1000);

如果你修复了 it does find a solution!

无论如何,我认为这是一个有趣的问题,并且在意识到您的代码已经正确(除了越界之外)之前实际上写了这个:

#include <iostream>
#include <array>

using quad = std::array<int,4>;

int get_next_number(const quad& q) { return (q[0]+q[1]+q[2]+q[3])%10; }
quad get_next(const quad& q) { return { q[1],q[2],q[3],get_next_number(q) }; }

int main() {
quad init{1,9,9,0};
int counter = 0;
quad current = get_next(init);
while (init != current) {
++counter;
current = get_next(current);
}
std::cout << counter;
}

当您随时需要的只是最后四个条目时,您不需要存储所有数字。通过使用仅包含最后 4 个数字的 std::array,比较也更具可读性。

请注意,@kiran Biradar 的解决方案更有效,因为上面我没有必要在每个步骤中移动所有数字,而他的代码只是在每个步骤中分配一个元素。

关于c++ - 在数组中查找重复模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52764568/

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