Определение пифагорейских троек заданного числа
Итак, школа началась, и я немного заржавел по своему кодированию, я пошел к своему профессору, и, по его словам, я близок, и я на несколько дюймов приблизился, я верю, но я застрял.
Назначение в основном для нас, чтобы понять, как использовать "Vi" в Linux, с небольшим назначением кодирования, сопровождающим его, чтобы мы могли кодировать в Vi.
Это то, что нам нужно сделать, попросить у пользователя положительное число, после того, как положительное число задано, нам нужно определить все пифагорейские тройки, которые возможны для чисел, вплоть до заданного числа.
Пока это то, что у меня есть...
#include <stdio.h>
int main(void)
{
int x = 0, y = 0, z = 0, n;
int count = 0;
printf("Please Enter A Positive Integer: \n");
scanf("%d", &n);
while (z <= n)
{
while (y < z)
{
while (x < y)
{
if (x * x + y * y == z * z)
{
printf("%d: \t%d %d %d\n", ++count, x, y, z);
}
x += 1;
}
y += 1;
}
z += 1;
}
Теперь, если я введу что-нибудь 5 или выше, я получу правильную тройку "3 4 5"
Please Enter A Positive Integer: 25
1: 3 4 5
Но независимо от того, как высоко я иду, это так далеко, как я получаю какие-либо советы?
3 ответа
Вам нужно сбросить значения х и у во время каждого из ваших циклов:). Что у вас есть примерно так:
for(z = 0; z <=n; z++)
for(; y < z; y++)
for(; x < y; x++)
Вместо этого вам нужно сбрасывать x и y каждый раз, когда достигаются их циклы, поэтому:
while(z <= n) {
y = 0;
while(y < z) {
x = 0;
//...
Сделайте небольшую отладку. Добавьте условие else в ваш пифагорейский тест, чтобы увидеть, какие значения вы на самом деле тестируете;
if (x * x + y * y == z * {
printf("%d: \t%d %d %d\n", ++count, x, y, z);
} else {
printf("NOT PYTH: %d: \t%d %d %d\n", ++count, x, y, z);
}
Это приведет вас к вашей проблеме.
Вы не сбрасываете x
а также y
в 0
на последующих итерациях внешних циклов. Вы можете подумать о for
петли вместо while
петли.
for (z = 0; z <= n; z++)
{
for (y = 0; y < z; y++)
{
for (x = 0; x < y; x++)
{
if (x * x + y * y == z * z)
{
printf("%d: \t%d %d %d\n", ++count, x, y, z);
}
}
}
}