[C++] Если 1-я цифра числа = 6,8 или 9, то найти ближайшее простое число, иначе перевести в 5-ю СС

Тема в разделе "Другие языки программирования", создана пользователем lizaliza, 7 сен 2013.

  1. lizaliza
    Оффлайн

    lizaliza Новый пользователь

    Сообщения:
    1
    Симпатии:
    0
    Помогите,пожалуйста,написать 2 программки с пояснениями,что и как...в программировании я полнейший ноль,а заданий понадавали выше крыши...и сказали "делайте как хотите"...не сплю уже 3 дня из-за них...
    1.Дано натуральное число. Если первая цифра числа - 6,8 или 9,то найти ближайшее к этому числу простое число, в противном случае перевести число в 5-ричную систему счисления.
    2.Дана последовательность вещественных чисел {aj}j=1...n (n<=40).Упорядочить элементы последовательности до первого числа, целая
    часть которого есть квадрат целого числа, (включительно) по не убыванию, а остальные элементы - по не возрастанию дробной части.
     
  2. Drongo
    Оффлайн

    Drongo Ассоциация VN/VIP Разработчик

    Сообщения:
    7.905
    Симпатии:
    8.222
    Если задача сложная, нужно разбить её на несколько простіх подзадач.
    1. Считіваем число
    2. Сохраняем поразрядно число в массив.
    3. Обходим массив с "оторванніми" числами на проверку 6, 8, 9
    4. Если условие истина - находим простое число(тут уточнение, ближайшее до или после введённого?) В решении выводится оба варианта, оставьте нужный.
    5. Иначе переводим в 5-ричную систему. (Я щас не вспомню как это делается, там надо отрывать разряды, остатки потом складывать, умножать, возводить в степень с основанием 5). Попробуйте самостоятельно эту часть решить.
    P.S. Решение не претендует на изысканность и профессионализм, но поставленную задачу выполняет. :)
    Код (C++):
    // Дано натуральное число. Если первая цифра числа - 6, 8 или 9,
    // то найти ближайшее к этому числу простое число,
    // в противном случае перевести число в 5-ричную систему счисления...
    #include < iostream >
    using std::cout;
    using std::cin;
    using std::endl;
    #include < math.h >

        // Функция расчитывающая количество чисел во введённом числе...
        int Rasriad(int enterNumber) {
            int n = enterNumber, x = 0;
            while (n != 0) {
                n /= 10;
                x++;
            }
            return x;
        }
        //Функция нахождения простого числа
    int PlainNumber(int num) {
            int a, count = 1, res;

            res = sqrt(num);
            for (a = 1; a <= res; a++) {
                if (num % a == 0 && count <= 2)
                    count++;
            }
            if (count <= 2)
                return num;
            else
                return -1;
        }
        // Главная функция main
    int main() {
            int enterNumber,
            lenght = 0,
                resultat,
                z;

            cout << "Enter Number: ";
            cin >> enterNumber;

            // определяет количество цифр в нем и их сумму.
            lenght = Rasriad(enterNumber);
            int * array = new int[lenght];

            // cout << "In Number:" << enterNumber << " Kol-vo chisel = " << lenght << endl << endl; // Вот эту строку

            int decimal = 1;
            for (int j = 1; j < lenght; j++)
                decimal *= 10;

            // Сохраняем поразрядно в массив
            // Хотя по существу это лишнее, достаточно одной операции
            // По выявлению самого высшего разряда на 6, 8, 9
            for (int j = 0; j < lenght; j++) {
                array[j] = enterNumber / decimal % 10;
                decimal /= 10;
            }

            // Если 1 разряд равен 6, 8, 9 - найти ближайшее к нему простое
            if (array[0] == 6 || array[0] == 8 || array[0] == 9) {
                for (int i = enterNumber; i > 1; i--) {
                    resultat = PlainNumber(i);
                    if (resultat != -1) {
                        cout << " PROSTOE: " << resultat << endl;
                        break;
                    }
                }
                for (int i = enterNumber; i < INT_MAX; i++) {
                    resultat = PlainNumber(i);
                    if (resultat != -1) {
                        cout << " PROSTOE: " << resultat << endl;
                        break;
                    }
                }
            }
            // Иначе переводим число в пятиричную систему счисления.
            else {
                cout << " Perevod v 5-richnuyu sistemu" << endl;
            }

            cin >> z;

            return 0;
        }
        //---------------------------------------------------------------------------
    За это задание совершенно не понял, простите.
     
    Последнее редактирование модератором: 17 дек 2014
    3 пользователям это понравилось.
  3. Сергей
    Оффлайн

    Сергей Активный пользователь

    Сообщения:
    254
    Симпатии:
    120
    Мне было бы проще перевести число в строковую переменную и посмотреть первую "букву"
    (извините что на Бейсике)
    Код (Text):
    if left$(CStr(N), 1) Like [6, 8, 9] Then
    или так:
    Код (Text):
    Х=left$(CStr(N), 1)
    if X="6" Or X="8" Or X="9" Then
    Но работа со строковыми переменными у программы займет больше времени
    --- Объединённое сообщение, 16 дек 2014, Дата первоначального сообщения: 16 дек 2014 ---
    Про простые числа есть совет:
    Если будете искать простое число по принципу перебора последовательности чисел, проверяя их на то, делятся ли они на что то кроме себя и единици, то берите только нечетные числа и проверяйте, делятся ли они на (нечетные, или простые) числа начиная с 3, заканчивая корнем квадратным с числа. То есть, чтобы узнать, является ли число 1000001 простым - достаточно проверить делимость на числа до 1000 (что в тысячу раз меньше, чем миллион) Но ,если позволяют ресурсы, то можно, чтобы таблица простых чисел была у программы уже готовая (в отдельном файле)
     
    Последнее редактирование модератором: 17 дек 2014
    Drongo нравится это.

Поделиться этой страницей