毕达哥拉斯三元组的 C 程序 - 输出不正确

标签 c pythagorean triplet

我想获取从 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;
}

Image

最佳答案

正如 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, 54, 3, 5 但我将其保留为OP 的练习。

关于毕达哥拉斯三元组的 C 程序 - 输出不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44658220/

相关文章:

c++ - 优化 C++ 中的三元组求和

c++ - 为什么我会收到 1I64<<31 的警告?

javascript - 查找数组中最近的点

c - 打印最高勾股数 - C

tensorflow - 如何在 tensorflow 中实现过滤器?

c++ - 将特征矩阵转换为三元组形式 C++

c - system() 偶尔会返回 2

c - 通过 C SDK 连接到 Kaa 服务器时收到 "Failed to get required buffer size"错误消息

c - 进程的信号量等价物?

c - 找到 a + b + c = 1000 的毕达哥拉斯三元组