19937 艺术与篮球

#include<bits/stdc++.h>
using namespace std;
/*
终止的方式:
设置了一个三层循环,对于每一天进行判断,等于2024年4月13日就要输出结果并且结束程序。
*/
/*
计算年份对应的数字不能直接进行操作,需要复制年份的值
*/
/*
每次进入循环的时候都要进行初始化。
总的笔画是年+月+日
确定顺序是从前往后进行计算,即每次计算月的和的时候要在年的基础上。
如不进行局部变量的初始化会将所有天数对应的笔画进行累加计算。
*/
int day[14]={0,31,31,31,30,31,30,31,31,30,31,30,31,0};//每一个月对应的天数
int b[10]={13,1,2,3,5,4,4,2,2,2};
int cnt=0;

int main()
{
  for(int i=2000;i<=2024;i++)
  {
    if(i%4==0&&i%100!=0||i%400==0) day[2]=29;//判断是否为闰年
    else day[2]=28;

    int sum=0;
    int year=i;
    //复制年份的值,不能直接用i,否则会对i进行修改。
    while(year)  //计算年份需要的笔画
    {
      sum+=b[year%10]; //不能直接改变i的值否则会卡死 
      year/=10;
    }

    for(int j=1;j<=12;j++)
    {
      int sum2=sum;//局部变量
      sum2+=b[j/10]+b[j%10];//计算月份的笔划
      for(int k=1;k<=day[j];k++)
      {
      	int sum3=sum2;//局部变量的初始化
        sum3+=b[k/10]+b[k%10];
        
        if(sum3>50) cnt++;
        
        if(i==2024&&j==4&&k==13) 
        {
          cout<<cnt;
          return 0;
        }
      }
    }
  } 
  return 0;
}

#include <bits/stdc++.h>
using namespace std;

int main()
{
  //将下标对应月份,将值对应天数。只需要开一个数组
  int month[14] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 0};//月份天数对应数组下标
  int bihua[10] = {13, 1, 2, 3, 5, 4, 4, 2, 2, 2};//笔画对应数组下标
  int sum = 0;

  for (int year = 2000; year <= 2024; year++) {//对所有的年进行遍历
    if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) month[2] = 29;//判断闰年
    else month[2] = 28;

    int Year = year;
    int number = 0;
    while (Year) {
      number += bihua[Year % 10];//计算年的笔画
      Year /= 10;
    }

    for (int M = 1; M <= 12; M++) {
      int number2 = number;
      number2 += bihua[M % 10]+bihua[M / 10];//计算月的笔画
      //月只有两位

      for (int day = 1; day <= month[M]; day++) {
        int number3 = number2;
        number3 += bihua[day % 10];
        number3 += bihua[day / 10];//计算天笔画


        if (number3 > 50)//判断是否大于50,去练篮球
        sum++;//进行练篮球的次数的累加

        //number1 2 3 是在循环中不断传递的
        //这样的三层循环也就是表示一天一天的加,判断每一天是否合法并且判断是否到达指定日期。
        if (year == 2024 && M == 4 && day == 13){//判断是否到达指定日期
          cout<<sum;
          return 0;
        }
      }
    }
  }
  return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值