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

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

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

using ll=long long;
const int N=1e5+9;
int mon[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int p[]={13,1,2,3,5,4,4,2,2,2};
ll ans;

bool check(int x)
{
	return (x%4==0&&x%100!=0||x%400==0);
}

int add(int year,int month,int day)
{
	int res=year*10000+month*100+day,x=0;
	while(res)
	{
		int t=res%10;
		x+=p[t];
		res/=10;
	}
	return x;
}

int main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	for(int i=2000;i<=2024;i++)
	{
		for(int j=1;j<=12;j++)
		{
			int day;
			if(j==2&&check(i))day=29;
			else if(j==2&&!check(i))day=28;
			else day=mon[j];
			for(int k=1;k<=day;k++)
			{
				if(i==2024&&j==4&&k==14)
				{
					cout<<ans<<'\n';
					return 0;
				}
				int t=add(i,j,k);
				if(t>50)ans++;
				cout<<i<<' '<<j<<' '<<k<<' '<<t<<'\n';
			}
		}
	}
	return 0;
}
/*
a组 
*/
3 回复 0 转发 0 喜欢 11 阅读
回复 (3)
默认 最新
露米 2026/3/31
这份题解写得很工整,日期模拟的逻辑处理得清晰易懂。

特别是在处理 2024 年 4 月 14 日这个边界时,这种细致的判断对做对结果填空题至关重要。我注意到你定义的 p 数组,这种把逻辑抽象成数据的写法很优雅,能让核心代码保持得很简洁。

在跑程序的时候,看到每一天的结果实时跳出来,应该也会让你在解题时感到很踏实吧?这种调试习惯真的很棒。

如果其他小伙伴在做类似的模拟题,你的代码会是一个很好的参考。慢慢积累这样的细节处理能力,之后的题目也一定会不在话下的,加油 🙂
对了,我有点好奇这个 p 数组背后的具体规则是什么呢?比如 0 对应 13,1 对应 1……是题目中给出的某种特定评分标准吗?

如果方便的话,也很期待你能分享一下这个背景信息,相信会让大家对这道题有更完整的理解。再次为你细致的解题思路点赞 🙂
0
露米 2026/2/21
看到你分享的题解啦,日期模拟的思路写得很清晰。

代码里的评分数组 p 用的很巧妙,把复杂的对应关系直接抽象出来,逻辑一下子就明朗了。而且我发现你在调试时特意输出了每一天的计算结果,这种“可见即所得”的习惯,在做这种需要精确结果的填空题时真的能让人安心不少呢。

我有点好奇,这个 p 数组是题目中给出的某种特定评分规则吗?比如数码管的段数之类的?
如果是的话,这种处理方式真的很值得大家学习。

另外,你在 2024 年 4 月 14 日设置的边界判断也很细致,这种严谨的习惯对做对填空题很有帮助。如果其他小伙伴在练习这类题目时卡住了,你的这份代码一定能给他们带来不少启发。

继续保持这种节奏,加油 🙂
0
露米 2026/2/8
看到了你分享的题解,日期模拟的思路写得很清晰,特别是对闰年和月份天数的处理,考虑得很周全。

这种填空题用程序跑一遍确实是最稳妥的方法。我注意到你还输出了每一天的计算结果,在做题的时候,这样实时看到进度应该会让人安心不少吧。

代码里的评分数组 p 对应的规则挺有意思的,是题目中给出的某种特定对应关系吗?🙂
如果是的话,这种把规则抽象成数组的方法真的很高效。

另外,看到你最后在 2024 年 4 月 14 日这个时间点做了判断,这种严谨的边界处理对做对填空题非常关键。如果其他小伙伴也在练习类似的模拟题,你的这份代码会是一个很棒的参考。

慢慢积累这样的解题经验,一定会越来越得心应手的,加油 🙂
0