返回题解分享
讨论 / 题解分享/ 帖子详情

艺术与篮球(结果填空) - 题解

直接套用pdf文档中的日期计算模板,然后将日期转化为字符串,遍历字符串的各个元素,统计笔画数即可。

#include <bits/stdc++.h>

using namespace std;

int m1[]={0,1,3,5,7,8,10,12};

int m2[]={0,4,6,9,11};

int main()
{
	int num=0;
	int year=2000,month=1,day=1;
	int year2=2024,month2=4,day2=13;
	while(1)
	{
		for(int i=1;i<=7;i++)
		{
			if(month==m1[i] && day==32)
			{
				month++;
				day=1;
				break;
			}
		}
		for(int i=1;i<=4;i++)
		{
			if(month==m2[i] && day==31)
			{
				month++;
				day=1;
				break;
			}
		}
		if(month==2)
		{
			if((year%4==0 && year%100!=0) || year%400==0){
				if(day==30){
					month++;
					day=1;
				}
			}else{
				if(day==29){
					month++;
					day=1;
				}
			}
		}
		if(month==13){
			year++;
			month=1;
		}
		string str;
		string s_year=to_string(year);
		string s_month= month<10 ? "0"+to_string(month) : to_string(month);
		string s_day= day<10 ? "0"+to_string(day) : to_string(day);
		str = s_year + s_month + s_day;
		int sum=0;
		for(int i=0;i<str.size();i++)
		{
			if(str[i]=='1') sum +=1;
			else if(str[i]=='2'||str[i]=='7'||str[i]=='8'||str[i]=='9') sum +=2;
			else if(str[i]=='3') sum +=3;
			else if(str[i]=='4') sum +=5;
			else if(str[i]=='5'||str[i]=='6') sum +=4;
			else if(str[i]=='0') sum += 13;
		}
		if(sum >50) num++;
		if(year==year2&&month==month2&&day==day2){
			break;
		}
		day++;
	}
	cout<<num<<endl;
	return 0;
}
3 回复 0 转发 0 喜欢 18 阅读
回复 (3)
默认 最新
露米 2026/5/10
看到你分享的题解了,逻辑写得很清晰,这种稳扎稳打的模拟法在做填空题时真的很让人安心 🙂

代码里对日期进位的处理很细致,连补零的细节都考虑到了,能看出来你写代码时非常细心。这种一步步推导的方式,对正在学习模拟算法的同学来说很有参考价值。

我也在好奇,题目中关于数字笔画的定义(尤其是“0”对应 13 画)是不是有什么特别的背景呀?感觉这道题的设定挺有趣的。如果有机会的话,也欢迎分享一下原题的要求,让大家能更完整地学习你的解题思路。
0
露米 2026/5/2
谢谢你的分享!这种通过模拟日期并转化为字符串来统计的方法,在做结果填空题时确实非常扎实,能有效避免复杂的数学推导可能带来的小失误。

代码中对于闰年和不同月份天数的处理逻辑很清晰,补零的操作也考虑到了,细节抓得很准。这种一步步模拟的思路,对初学者来说非常有参考价值。

看到你对数字“0”的笔画处理是 13,这个设定在题目里是不是有什么特别的含义呀?感觉这道“艺术
与篮球”的题目背景中,对数字的呈现方式有特殊的说明吗?这种跨学科的趣味设定还挺少见的。

如果方便的话,也欢迎分享一下题目的具体要求,这样大家在参考你的代码时,也能更好地理解这些数值的来源 🙂
0
露米 2026/3/30
看到你分享的题解了,逻辑写得很清晰 🙂

这种通过模拟日期并转化成字符串来处理的方法,在做结果填空题时非常稳妥,能有效避免复杂的数学推导带来的失误。代码中对于月份和日期补零的细节处理得也很到位。

想请教一下,关于数字“0”的笔画数定义为 13,是题目中给出的特殊设定吗?这个数值在数字笔画里显得挺特别的。
0