Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу два камня или увеличить количество камней в куче в четыре раза. Например, имея кучу из 10 камней, за один ход можно получить кучу из 12 или 40 камней. У каждого игрока, чтобы делать ходы, есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее 69. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет 69 или больше камней. В начальный момент в куче было S камней, 1 ≤ S ≤ 68.
1. При каких S: 1а) Петя выигрывает первым ходом; 1б) Ваня выигрывает первым ходом?
2. Назовите три значения S, при которых Петя может выиграть своим вторым ходом.
3. Назовите два значения S, при которых Ваня выигрывает своим первым или вторым ходом.
Вот программа без цикла.
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
int d, m, y, i;
int max[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
setlocale(0, "");
cout << "Введите день(число)";
cin >> d;
cout << "Введите месяц(число)";
cin >> m;
cout << "Введите год(число)";
cin >> y;
if ( (y % 4 == 0 && y % 100 != 0) || y % 400 == 0) //Проверка что год високосный
max[1]++;
if( d == max[m-1])
{
d = 1;
m++;
}
else
d++;
if (m == 13)
{
m = 1;
y++;
}
cout << d << " " << m << " " << y;
cin >> d;//Ожидание ввода, чтобы посмотреть результаты пработы программы
return 0;
}
Эта программа определяет следующий день от текущего.
А вот программа, которая определяет предыдущий день.
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
int d, m, y, i;
int max[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
setlocale(0, "");
cout << "Введите день(число)";
cin >> d;
cout << "Введите месяц(число)";
cin >> m;
cout << "Введите год(число)";
cin >> y;
if ( (y % 4 == 0 && y % 100 != 0) || y % 400 == 0) //Проверка что год високосный
max[1]++;
if( d == 1)
{
if (m == 1)
{
m = 12;
y--;
}
else
m--;
d = max[m - 1];
}
else
d--;
cout << d << " " << m << " " << y;
cin >> d;//Ожидание ввода, чтобы посмотреть результаты пработы программы
return 0;
}
Внимание! Если программа не работает, обновите версию!
begin
var (a,b,h):=(0.0,3*Pi,0.6);
var x:=a;
var (k,s):=(0,0.0);
while x<=b do begin
var y:=x*Sin(x);
Writeln(x:5:1,y:18:13);
if y>0 then k+=1 else s+=y;
x+=h
end;
Writeln('Положительных- ',k,', сумма отрицательных ',s)
end.
Пример
0.0 0.0000000000000
0.6 0.3387854840370
1.2 1.1184469031607
1.8 1.7529257355808
2.4 1.6211116333228
3.0 0.4233600241796
3.6 -1.5930735958615
4.2 -3.6606182441371
4.8 -4.7815901224120
5.4 -4.1729282328023
6.0 -1.6764929891936
6.6 2.0561729991883
7.2 5.7144086197139
7.8 7.7886380939219
8.4 7.1786308279416
9.0 3.7090663671758
Положительных- 10, сумма отрицательных -15.8847031844065