Помогите решить задачу

Вот текст задачи:
Даны натуральные числа п, а 1 ..., a n . Определить количество членов
последовательности а 1, ..., a n , имеющих нечетные порядковые номера, при
этом будучи кратными 3 и не кратными 5;

#include <iostream> 
#include <conio.h>
#include<Windows.h>
#include<cstdlib>
#include <time.h>

using namespace std;
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    setlocale(LC_ALL, "Rus");
    while (true) {
        int  n;
        int c;
        int k;
        int i;
        do
        {
            cout << "Выберите вариант\n " << endl;
            cout << "1. Перейти к решению задачи\n";
            cout << "2. Выйти\n" << endl;
            cin >> c;
            switch (c)
            {
            case 1:
                cout << "введите n: ";
                cin >> n;
                srand((unsigned)time(0));
                cout << "\n n случайных чисел  \n";
                i = 1; // переменная, управляющая циклом,получает 
   начальное значение.
                while (i <= n) // проверка условия исполнения цикла
                {
                    cout << rand() % 101 << endl; //вывод случайного числа
                    i++; // изменение переменной, управляющей циклом, на 1
                    int* p, * g; //определение указателей
                    k = 0;
                    p = &n; //берём адрес переменной x
                    g = p;  //создаём ещё один указатель который тоже указывает на x


                    if (*g % 2 != 0 && *g%3==0 && *g%5!=0)
                    {
                        k += 1; 
                    }
                    cout << k;
                }


                    _getch();
                    system("cls");
                    break;
                case 2: return 0;
                default: cout << "нет такого пункта меню";
                    system("pause"); break;
                    system("cls");




            }

        } while (true);
    }
}

меню работает как надо, числа тоже выводятся (но почему то иногда начинаются с нуля, например 089 и тп) а вот условие if не выполняется совсем:(
подскажите пожалуйста,как исправить ситуацию?

В корзине лежат 15 мячиков: 5 синих, 7 зелёных, остальные — красные.
С какой вероятностью случайно вытащенный мячик окажется красным? Через рандом

Ivan_Dvoroviy,

Числа начинаются с нуля, потому что вы выводите в поток значение счётчика 'k' (который равен нулю) и значение сгенерированного случайного числа, не разделив эти значения пробелом

Кроме того, в коде есть несколько ошибок:

1) По условию задачи, вы должны сравнивать сгенерированное число на определённое условие. Вы же сгенерированное число отправляете в поток вывода, при этом сравнение происходит не с ним, а со значением указателя на 'n'.

В данном случае 'n' — это не случайное число, а длина последовательности случайных чисел, введённая пользователем.

Нужно сохранять случайно сгенерированное число в отдельную переменную, например randomNum:

int randomNum = (rand() % 101) + 1;

И затем указатели должны указывать именно на эту переменную, а не на 'n' (если эти указатели вам, конечно, вообще нужны):

p = &randomNumber;
g = p;

2) Вы в каждой итерации обнуляете счётчик 'k', который подсчитывает количество найденных чисел по критерию.

Обнуление нужно вынести выше объявления цикла

k = 0;
while (i <= n)
{ ... }

Полный пример исправленного кода ниже:

#include <iostream> 
#include <cstdlib>
#include <time.h>
#include <conio.h>

using namespace std;

int main()
{
    setlocale(LC_ALL, "Rus");

    while (true) 
    {
        int n;
        int c;
        int k;
        int i;
        int randomNumber = 0;

        do
        {
            cout << "Выберите вариант\n " << endl;
            cout << "1. Перейти к решению задачи\n";
            cout << "2. Выйти\n" << endl;

            cin >> c;

            switch (c)
            {
            case 1:
                srand((unsigned)time(0));

                cout << "введите n: ";
                cin >> n;
                cout << '\n' << n << " случайных чисел\n";
                i = 1;
                k = 0; // обнуление счётчика совпадений вынесено из цикла

                while (i <= n)
                {
                    randomNumber = (rand() % 101) + 1;

                    cout << "Случайное число: " << randomNumber;
                    i++;
                    int *p, *g;

                    p = &randomNumber;
                    g = p;


                    if (*g % 2 != 0 &&
                        *g % 3 == 0 &&
                        *g % 5 != 0)
                    {
                        cout << " (подходит под условие)";
                        k += 1;
                    }
                    cout << ", всего совпадений по условию: " << k << '\n';
                }
                _getch();
                system("cls");
                break;
            case 2:
                return 0;
            default:
                cout << "нет такого пункта меню";
                system("pause");
                system("cls");
                break;
            }

        } while (true);
    }
}

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.