C программа на пифагорейских триплетах - неверный вывод

Я хочу взять каждую комбинацию чисел от 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;
}

Образ

1 ответ

Как Джонатан Леффлер уже писал в комментариях, нужно проверить на равенство i*i + j*j == k*k, Вы не можете не делать это напрямую, потому что f это поплавок и 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 но я оставлю это как упражнение для ОП.

Другие вопросы по тегам