gpt4 book ai didi

c - C 中 z^2 = x^2 + y^2 的解决方案。代码适用于小数字,但适用于较大数字的段错误

转载 作者:行者123 更新时间:2023-11-30 18:20:04 24 4
gpt4 key购买 nike

我用 python 和 C 编写了一些代码来找到 z^2 = x^2 + y^2 的解,其中 x、y 和 z 都是整数。从似乎运行良好的 python 代码中,我知道对于某个给定范围有多少种解决方案。对于范围从 1 到 10000 的 x 和 y,应该有 14471 个唯一的解决方案,或者加倍,计算重复项有 28942 个。

在下面的代码中,如果我对 x 和 y 使用 1 到 1000 的范围,并将数组解决方案设置为适当的大小(在本例中为 2064),则代码可以正常工作。 但是当我尝试将 x 和 y 的范围扩展到 1 到 10000 时,出现段错误,但不知道为什么会这样。

int main()
{
int solutions[28942][2]={0};
int counter = 0;

for(int x=1;x<10000;++x)
{
for(int y=1; y<10000;++y)
{
float z = sqrt(x*x + y*y);
if(z == (int) z)
{
solutions[counter][0] = x;
solutions[counter][1] = y;
++counter;
}
}
}

for(int i = 0;i<28942;++i)
{
printf("This is a solution: {%d,%d}\n",solutions[i][0],
solutions[i][1]);
}

printf("value of counter is %d\n",counter );
}

最佳答案

也许您的代码接受不合法的解决方案。将 float 与 int 进行比较是一件棘手的事情。

尝试这样做:

int z = (int) sqrt(x*x + y*y);

if(z*z == (x*x + y*y)) {
solutions[counter][0] = x;
solutions[counter][1] = y;
++counter;
}

这样你就只比较整数

关于c - C 中 z^2 = x^2 + y^2 的解决方案。代码适用于小数字,但适用于较大数字的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32075675/

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