Попытка написать программу на C , в которой перечислены все вежливые числа в верхнем значении

#c #c 11

Вопрос:

Например, если пользователь вводит число 21, я хочу, чтобы были перечислены все вежливые номера. таким образом, для 21 результат будет 3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21. Я новичок в циклах, и мне трудно заставить это работать. Я не могу включить какие-либо глобальные переменные для этого задания. Любая помощь будет очень признательна. Спасибо.

Комментарии:

1. n никогда не вводится в эксплуатацию. Чтение из неинициализированной переменной является неопределенным поведением, и его, как правило, следует избегать. Ваш код также говорит о числах Фибоначчи и, похоже, использует для них формулу. После быстрого поиска в Интернете вы можете обнаружить, что числа, не являющиеся степенями двойки, являются вежливыми, поэтому вам просто нужно проверить, соответствует ли это число, а не печатать это в данном случае.

2. Привет, Лала. Я исправил свой код, чтобы не печатать числа, которые являются степенями двух. При этом по-прежнему отображаются невежливые числа, такие как 9 и 32, когда я запускаю свою программу. Он также не отображает некоторые вежливые цифры. Я отредактировал свой пост, чтобы вы могли видеть мои обновления.

3. 9 вежлив, насколько я могу судить (2 3 4) и 32-это степень двух (2^5)

4. За последние несколько дней я видел по крайней мере 5 вопросов о вежливых цифрах с одинаковым кодом обработки ввода. Мне любопытно: это задание, в котором вам рекомендуется использовать переполнение стека?

Ответ №1:

Похоже, что вы просто исключаете числа, которые являются квадратами, что не приведет к правильному ответу. Вы можете либо создать массив до значения UP с начальным значением, равным 0, и пометить все степени 2 как 1, используя это для цикла:

 for(int j=1;j<=upValue;j*=2){
    arr[j]=1;
}
 

теперь вы отметили все степени двойки, а затем перебираете все значения от 1 до повышающего значения и выводите те, которые установлены в 0;

Ответ №2:

Следующая программа делает то, что вы хотите, чтобы она делала.

 #include <iostream>
#include <math.h>
   
    void politeNo(int input)
    {
        // Print all initial input Polite number
        for (int n = 1; n <= input;   n)
        {

            // Calculate nth Polite number
            int result = (int)(n  
                (log((n   (log(n) /
                    log(2))))) /
                log(2));

            // Display calculated result
            std::cout << " " << resu<
            if (result == input){break; }
        }
    }
int main()
{
    int upValue = 0;
    std::cout<<" What is the upper value ?";
    std::cin >> upValue; //Stores user input into upValue

    while (upValue < 1) //Validate user input of upper limit
    {
        std::cout << "What is the upper value? (must be an integer > 0) ";
        std::cin >> upValue;
    }
    politeNo(upValue);
    return 0;
}
 

Выход:

 1 3 5 6 7 9 10 11 12 13 14 15 17 18 19 20 21
 

Комментарии:

1. Могу я предложить вам подумать о том, какие цифры невежливы ? Вы, вероятно, найдете гораздо более простой (и численно надежный) способ выполнения этой задачи. Кстати, пожалуйста, обратите внимание, что начиная с C 11 вы можете использовать std::log2 .