Форум программистов, компьютерный форум, киберфорум
Наши страницы

Не используя функций определить члены последовательности, являющиеся квадратами четных чисел - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ссылки в С++ http://www.cyberforum.ru/cpp-beginners/thread751019.html
void swap(int& i, int& j) { int tmp = i; i = j; j = tmp; } int main() { int x, y;
C++ Как доделать длинную целочисленную арифметику? Операторы: сравнения присваивания, сложения, вычитания, левого и правого сдвига, деления, остатка, умножения, приведения к обычному целому, унарный минус, деструктор и конструкторы реализованы, тесты... http://www.cyberforum.ru/cpp-beginners/thread751009.html
C++ Найти 100 первых простых чисел
найти 100 первых простых чисел
Оператор while C++
Поскольку я еще начинающий, то задам такой вопрос: В цикл while мне нужно поставить несколько условий, вот, что я пишу: while (a1 = a2; a1 = a3; a1 = a4; a1 = a5; a1 = a6; a1 = a7; a1 = a8; a1 =...
C++ По результату определить загаданное число http://www.cyberforum.ru/cpp-beginners/thread750992.html
Клоун предложил каждому из публики задумать число. Потом он сказал: «Прибавьте к задуманному числу 5. Теперь из результата вычтите 2. А теперь к результату прибавьте 7». Потом клоун спросил у...
C++ Возврат массива из функции Есть задача: используя функции, вычислить количество элементов заранее введённых массивов, которые кратны Х, и переписать в отдельный массив индексы отрицательных элементов этих массивов. Вот код: ... подробнее

Показать сообщение отдельно
OhMyGodSoLong
~ Эврика! ~
1245 / 994 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
02.01.2013, 19:16
А очевидное банальное решение никому в голову не приходит?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
 
int main()
{
    int n;
    unsigned *nums;
 
    std::cin >> n;
    nums = new unsigned[n];
 
    unsigned max = 0;
    for (int i = 0; i < n; i++) {
        std::cin >> nums[i];
        if (nums[i] > max) {
            max = nums[i];
        }
    }
 
    unsigned count = 0;
    // num * num может вызвать переполнение, ну да ладно
    for (unsigned num = 0; num * num < max; num += 2) {
        for (int i = 0; i < n; i++) {
            if (nums[i] == num * num) {
                count++;
            }
        }
    }
 
    std::cout << count;
 
    delete [] nums;
    return 0;
}
C вычислением корня, за один проход:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
 
int main()
{
    int n;
    unsigned *nums;
 
    std::cin >> n;
    nums = new unsigned[n];
    for (int i = 0; i < n; i++) {
        std::cin >> nums[i];
    }
 
    unsigned count = 0;
    for (int i = 0; i < n; ++i) {
        unsigned num   = nums[i];
        unsigned mover = 0x40000000;
        unsigned root  = 0;
        unsigned block;
        while (mover) {
            block = root | mover;
            root >>= 1;
            if (num >= block) {
                num -= block;
                root |= mover;
            }
            mover >>= 2;
        }
        if (root % 2 == 0 && (root * root) == nums[i]) {
            count++;
        }
    }
 
    std::cout << count;
 
    delete [] nums;
    return 0;
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru