Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
TheNorby
0 / 0 / 0
Регистрация: 30.10.2016
Сообщений: 1
1

Разобраться в коде подсчета суммы зерен на шахматной доске.

30.10.2016, 18:08. Просмотров 182. Ответов 3
Метки нет (Все метки)

Помогите разобраться в исходном коде. Почему здесь в цикле «for» находиться другой цикл «for»? Что значит символ «j» и переменная pow? И почему в конце кода надо опять писать pow = 1?? Спасибо.

C++
1
2
3
4
5
6
7
8
9
10
11
const int N = 64;
    unsigned long long result = 1, pow = 1;
 
    for(int i(1); i <= 64; i++)
    {
       for(int j(0); j < i; j++)
          pow *= 2;
       cout << "В сумме на " << i << " клетке приходиться " << result << " зерна!\n";
       result += pow;
       pow = 1;
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.10.2016, 18:08
Ответы с готовыми решениями:

Числа на шахматной доске в С++
В клетках шахматной доски находятся целые числа. --- Определить в программе...

Числа на шахматной доске
В клетках шахматной доски находятся целые число. --- Определить в программе...

Числа на шахматной доске
В клетках шахматной доски находятся целые число. --- Определить в программе...

Ход на шахматной доске
Поле шахматной доски определяется парой натуральных чисел, первое из которых...

Замена фигур на шахматной доске
задача. расставить случайным образом четырех коней на шахматной доске (два...

3
zss
Модератор
Эксперт С++
7182 / 6679 / 4228
Регистрация: 18.12.2011
Сообщений: 17,627
Завершенные тесты: 1
30.10.2016, 22:18 2
Можете 6 и 10 строчки убрать.
Результат не изменится.
Цикл по j зачем-то снова пересчитывает 2i
0
Croessmah
++Ͻ
14611 / 8365 / 1576
Регистрация: 27.09.2012
Сообщений: 20,561
Записей в блоге: 2
Завершенные тесты: 1
31.10.2016, 13:22 3
C++
1
2
       for(int j(0); j < i; j++)
          pow *= 2;
цикл "накапливает" в pow степень двойки,
добираясь до нужной степени на каждой итерации.

C++
1
       pow = 1;
"сбрасывает" нашу степень,
чтобы начать заново на новой итерации.

Зачем это нужно? А фиг его знает,
вполне можно вот так сделать:

C++
1
2
3
4
5
6
    for(unsigned long long i(1); i <= 64; i++)
    {
       cout << "В сумме на " << i << " клетке приходится " << result << " зерна!\n";
       result <<= 1u;
       result |= 1u;
    }
т.е. вообще без pow и цикла.

Или даже без всяких result:

C++
1
2
3
4
    for(unsigned long long i(0); i < 64; i++)
    {
       cout << "В сумме на " << (i+1) << " клетке приходится " << ((1ull << i) | ((1ull << i) - 1ull)) << " зерна!\n";
    }
0
Байт
Эксперт C
18318 / 12029 / 2506
Регистрация: 24.12.2010
Сообщений: 24,293
31.10.2016, 14:16 4
C++
1
for(res=0, i=0; i<N; i++) res |= (1<<i);
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.10.2016, 14:16

Цвет клеток на шахматной доске
Даны координаты двух различных полей шахматной доски x1, y1, x2, y2 (целые...

Геометрическая прогрессия на шахматной доске
Всем доброго времени суток.Отписывайтесь кто как решил. #include &quot;head.h&quot; ...

Задача о зернах на шахматной доске
Математическая задача, в которой вычисляется, сколько будет зёрен на шахматной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru