Descripción del problema
Xiaolan se ejercita todos los días.
-
En circunstancias normales, Xiaolan corre 1 kilómetro todos los días.
-
Si un día es lunes o principio de mes (1º), para motivarse, Xiaolan correrá 2 kilómetros.
-
Si también es lunes o principios de mes, Xiaolan también correrá 2 kilómetros.
Xiaolan ha estado funcionando durante mucho tiempo, desde el sábado 1 de enero de 2000 (inclusive) hasta el jueves 1 de octubre de 2020 (inclusive).
¿Cuántos kilómetros corrió Xiaolan durante este período?
Envío de respuesta
Esta es una pregunta que llena los espacios en blanco con el resultado, solo necesitas calcular el resultado y enviarlo.
El resultado de esta pregunta es un número entero. Al enviar la respuesta, solo complete este número entero. Si completa el contenido adicional, no podrá puntuar.
Respuesta: 8879
respuesta:
解题思路
:
- Utilice
0 ~ 6
para representar周一 至 周日
; - Se utiliza
sum
para representar2000年1月1日
a某年某月某日
la cantidad de días transcurridos; - Desde el
2000年1月1日
sábado, el uso(sum + 5) % 7
puede representar某年某月某日
la semana; - Porque
2020年10月1日
sin tratamiento, al finalans += 2
;
#include <iostream>
using namespace std;
int days[13] = {
0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
bool is_leap(int year)
{
return year % 400 == 0 || year % 4 == 0 && year % 100 != 0;
}
int get_day(int year, int month)
{
if(month == 2) return 28 + is_leap(year);
return days[month];
}
int main()
{
int sum = 0, ans = 0;
for (int i = 2000; i <= 2019; i ++)
for (int j = 1; j <= 12; j ++)
for (int k = 1; k <= get_day(i, j); k ++)
{
int weekday = (sum + 5) % 7;
if(k == 1 || weekday == 0) ans += 2;
else ans ++;
sum ++;
}
for (int j = 1; j <= 9; j ++)
for (int k = 1; k <= get_day(2020, j); k ++)
{
int weekday = (sum + 5) % 7;
if(k == 1 || weekday == 0) ans += 2;
else ans ++;
sum ++;
}
cout << ans + 2 << endl;
return 0;
}
Copa Lanqiao C / C ++ Grupo Competencia provincial Preguntas de años anteriores