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

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

30.10.2016, 18:08. Просмотров 434. Ответов 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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.10.2016, 18:08
Ответы с готовыми решениями:

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

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

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

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

Расстановка ферзей на шахматной доске
Найти на кубической доске всевозможные расстановки 15 ферзей так, чтобы они не били друг друга

3
zss
Модератор
Эксперт С++
8607 / 7563 / 4678
Регистрация: 18.12.2011
Сообщений: 20,069
Завершенные тесты: 1
30.10.2016, 22:18 2
Можете 6 и 10 строчки убрать.
Результат не изменится.
Цикл по j зачем-то снова пересчитывает 2i
0
Croessmah
++Ͻ
15816 / 8951 / 1719
Регистрация: 27.09.2012
Сообщений: 21,992
Записей в блоге: 2
Завершенные тесты: 2
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
21301 / 13468 / 2839
Регистрация: 24.12.2010
Сообщений: 28,555
31.10.2016, 14:16 4
C++
1
for(res=0, i=0; i<N; i++) res |= (1<<i);
0
31.10.2016, 14:16
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.10.2016, 14:16

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

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

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


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

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

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