2016-11-24 5 views
0

Я пытаюсь вычислить свою программу для всех этих умножений: 999 * 999, 999 * 998, 998 * 998, 998 * 997, ....... .. До 100 * 100.синтаксис - C++ - Не могу заставить мой код работать правильно

Прямо сейчас, это только калькулятор 999 * 999 998 * 998 997 * 997 ... 100 * 100. Не понимаю почему? Можете ли вы посмотреть мой код? Благодаря BR

#include <iostream> 
#include <vector> 
#include <cmath> 


int main() { 
    int i = 999; 
    int j = 999; 
    while (j >= 100) { 
     i == j ; 
     while (i >= j-1) { 
      std::cout << i*j << std::endl; 
      i -= j; 
     } 
     j = j-1; 
    } 

    return 0; 
} 
+2

'i == j' является причиной –

+0

Я уже пробовал i = j; но проблема остается прежней. Он вычисляет только 999 * 999 998 * 998 997 * 997 .... – nolw38

+1

В перечислении нескольких чисел не указывается, какой результат должен быть. Пока вы не сможете четко и лаконично объяснить, что вы хотите сделать, вы не сможете написать код, чтобы сделать это, и, наоборот, как только вы сможете это объяснить, писать код будет просто. –

ответ

2

Вы не видите свои петли правильно. Сначала попробуйте записать числа, которые вы хотите вычислить в таблице, и использовать их для создания ваших циклов.

Для одного значения вашего первого переменного цикла - назовет это я, вы хотите умножить на один, потом два, потом три (и т.д.), значение J.

Независимо от того, что эти значения J на самом деле, ваши петли должны выглядеть следующим образом:

for(int i=999; i>=100; --i) 
    for(int j=999; j>=i; j--) 
      ; //computation goes here 

Здесь ясно видно, что при одном значении я, вы будете использовать одно значение из J когда я = 999, то два значения J, то Автошоу ...

Если вы новичок в кодировании, я бы реко исправить, начиная с для, и переключаться на , тогда как, когда вы чувствуете себя комфортно с бывшими.

0

Вы можете использовать два для петель, как это:

#include <iostream> 

int main() 
{ 
    for (int i = 999; i > 99; --i) 
    { 
     for (int j = 0; j < 2; ++j) 
     { 
      std::cout << i * (i - j) << std::endl; 
     } 
    } 
} 
+0

Хорошая идея! Я об этом не думал! В любом случае, я был бы рад, если бы мог понять, почему моя работа не работала. - «:)) – nolw38

0

Я пытался исправить свой код, но внутреннее время цикла действительно должны быть удалены. После того, как я удалил его, я не могу сказать, переписываю ли я его или исправляю. Во всяком случае, это удалить, не нужно вообще.

Вот правильный код:

#include <iostream> 
#include <vector> 
#include <cmath> 

int main() { 
    int i = 999; 
    int j = 999; 
    while (j >= 100) { 
    std::cout << i << " " << j << std::endl; 

    if (i==j) 
     --j; 
    else 
     --i; 
    } 

    return 0; 
} 

Логика проста, когда i==j, мы --j. Всякий раз, когда i!=j, мы --i. Начнем с i и j в одном и том же положении во время цикла, когда i на один шаг за j, я делаю шаг. Когда i и j находятся в одном и том же положении, j делает шаг.

+0

Он отлично работает. Благодаря! Его также проще – nolw38

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