2013-09-10 5 views
1

Итак, школа началась, и я немного ржав на своем Кодировании, я пошел к своему профессору и, по его словам, я близко, и я еще немного поближе, но я застрял ,Определение пифагорейских троек с заданным номером

Задача в основном заключается в том, чтобы мы поняли, как использовать «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 

Но как бы ни высоко я иду, это насколько я могу получить советы?

+1

Исправьте свой отступ, и вам будет легче найти ошибку. – Blender

+0

Это одна из самых больших проблем, с которыми я сталкиваюсь с Vi, отступы - это боль, какие-нибудь советы по горячим клавишам, чтобы исправить отступы? –

+0

@dwarduk Это решило мою проблему !! Я просто смущен тем, почему мне приходится каждый раз переустанавливать его на 0, я думаю, что он просто продолжит давать мне 3 4 5, 3 4 5, 3 4 5, потому что он будет продолжать возвращаться к этой тройке I я, очевидно, ошибаюсь, но можете ли вы объяснить словами, почему мне нужно было сбросить значения? –

ответ

1

Вам необходимо сбросить значения x и y во время каждого из ваших циклов :). Что у вас есть примерно так:

for(z = 0; z <=n; z++) 
    for(; y < z; y++) 
     for(; x < y; x++) 

Вместо этого вам нужно сбросить х и у каждый раз, когда будут достигнуты их контуры, так:

while(z <= n) { 
    y = 0; 
    while(y < z) { 
     x = 0; 
     //... 
1

Вы не сброс 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); 
      } 
     } 
    } 
} 
1

Сделайте небольшую отладку. Добавьте предложение else в свой тест pythagorean, чтобы узнать, какие значения вы фактически тестируете;

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); 
} 

Это приведет вас к вашей проблеме.

Смежные вопросы