我想获取从 1 到 30、a 和 b 的所有数字组合,并想找出它们的毕达哥拉斯三元组。所有数字的限制是 30。输出从 14 开始。我不明白为什么。我真的对于任何重大错误或格式错误,我深表歉意。我刚刚开始使用 C。谢谢:)
#include<stdio.h>
#include<math.h>
int main()
{
float k;
int i,j,sum;
for(i=1;i<=30;i++)
{
for(j=1;j<=30;j++)
{
sum=(i*i)+(j*j);
k=sqrt(sum);
if(k>30.0)
{
break;
}
printf("Pythagorean Triplets are %d,%d,%f \n",i,j,k);
}
}
return 0;
}
最佳答案
正如 Jonathan Leffler 在评论中所写,您需要测试是否相等 i*i + j*j == k*k
。你不能直接这样做,因为 f
是 float ,而 i,j
是整数,你需要它们都是整数数据类型。没什么问题,只需做一些事情
#include <stdio.h>
#include <math.h>
int main(void)
{
float k;
int i, j, sum, k2;
for (i = 1; i <= 30; i++) {
for (j = 1; j <= 30; j++) {
sum = (i * i) + (j * j);
// you have "float k", hence "sqrtf()" instead of "sqrt()"
// which is for "double"s
k = sqrtf(sum);
// floating point numbers with any notes are "double"s,
// hence the "F" at the end
if (k > 30.0F) {
break;
}
// this may not work for very large values but you have 30
// as your upper limit which is low enough
k2 = (int) floorf(k);
if (k2 * k2 == sum) {
// use 2 digits for the format, makes it a bit more readable
printf("Pythagorean Triplets are %2d, %2d, %2d\n", i, j, k2);
}
}
}
return 0;
}
这里可以省略其他强制性的错误检查,因为输入是已知的,而且更知道它始终有效。
但列表仍然比预期大,它包含双峰,例如:3, 4, 5
和 4, 3, 5
但我将其保留为OP 的练习。
关于毕达哥拉斯三元组的 C 程序 - 输出不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44658220/