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

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

30.10.2016, 18:08. Просмотров 171. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Разобраться в коде подсчета суммы зерен на шахматной доске. (C++):

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

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

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

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

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

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

3
zss
Модератор
Эксперт С++
6960 / 6522 / 4139
Регистрация: 18.12.2011
Сообщений: 17,209
Завершенные тесты: 1
30.10.2016, 22:18 #2
Можете 6 и 10 строчки убрать.
Результат не изменится.
Цикл по j зачем-то снова пересчитывает 2i
0
Croessmah
++Ͻ
14162 / 8087 / 1513
Регистрация: 27.09.2012
Сообщений: 19,931
Записей в блоге: 3
Завершенные тесты: 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
17777 / 11802 / 2453
Регистрация: 24.12.2010
Сообщений: 23,729
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
Привет! Вот еще темы с решениями:

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

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

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

Расставить n ладей на шахматной доске n*n
Вообщем нужно расставить n ладей на шахматной доске n*n Вот то что у меня...


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

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

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