站外题,50分,求大佬改代码
  • 板块学术版
  • 楼主CSPJ_AKme
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/8/4 15:45
  • 上次更新2023/11/3 05:56:49
查看原帖
站外题,50分,求大佬改代码
1030814
CSPJ_AKme楼主2023/8/4 15:45

问题 B: 日历中的数字

[命题人 : admin] 时间限制 : 1.000 sec 内存限制 : 128 MB

题目描述

ElemenT马上就要毕业了,他打开日历看了看时间。发现日历上的日期都是2017-04-04这样的格式的,月和日如果不足2位数,前面都会补充0。

给定一个年份和月份,

ElemenT把那个月的日期都按上述格式写到纸上,他现在想知道某种数字出现了多少次。

输入

多组输入 每组输入一行,有3个数字y,m,x(1000<=y<=3000,1<=m<=12,0<=x<=9),分别代表年份,月份,和他想知道哪个数字出现的次数。

输出

每组输出一个整数,表示数字x在这个月的日期里出现了多少次。

样例输入

2017 4 4

样例输出

33

提示

第一组样例中,日中有数字4的为2017-04-04,2017-04-14,2017-04-24,4月一共有30天,因为月份中有4,所以数字4一共出现了30 + 3 = 33次

我的代码

#include<bits/stdc++.h>
using namespace std;
bool runnian(int y)
{
	if((y%4==0&&y%100!=0)||(y%100==0&&y%400!=0))
	{
		return true;
	}
	return false;
}
int main()
{
	int a,b,c;
	while(cin>>a>>b>>c)
	{
		int ans=0;
		if(b==c)
		{
			if(b==1||b==3||b==5||b==7||b==8)
			{
				ans+=31;
			}
			if(b==2)
			{
				if(runnian(a)==true)
				{
					ans+=29;
				}
				else
				{
					ans+=28;
				}
			} 
			else
			{
				ans+=30;
			}
		}
		if(b!=c&&c!=0)
		{
			if(b==10)
			{
				if(c==1)
				{
					ans+=31;
				}
			}
			if(b==11)
			{
				if(c==1)
				{
					ans+=60;
				}
			}
			if(b==12)
			{
				if(c==1||c==2)
				{
					ans+=31;
				} 
			}
		}
		
		for(int i=10;i<=1000;i*=10)
		{
			if(a-a%i==c)
			{
				if(b==1||b==3||b==5||b==7||b==8||b==10||b==12)
				{
					ans+=31;
				}
				if(b==2)
				{
					if(runnian(a)==true)
					{
						ans+=29;
					}
					else
					{
						ans+=28;
					}
				}
				else
				{
					ans+=30;
				}
			}
		}
		if(c==1)
		{
			if(b==1||b==3||b==5||b==7||b==8||b==10||b==12)
			{
				ans+=13;
			}
			else
			{
				ans+=12;
			}
		}
		if(c==2)
		{
			ans+=12;
		}
		if(c==3)
		{
			if(b==1||b==3||b==5||b==7||b==8||b==10||b==12)
			{
				ans+=5;
			}
			if(b==2)
			{
				ans+=3;
			} 
			else
			{
				ans+=4;
			}
		}
		else
		{
			if(b!=2)
			{
				ans+=3; 
			}
			else
			{
				if(c==9)
				{
					if(runnian(a)==true)
					{
						ans+=3;
					}
					else
					{
						ans+=2;
					}
				}
				else
				{
					ans+=3;
				}
			}
		}
		cout<<ans<<endl;
	}
	return 0;
}

如果有大佬给我讲讲什么新的思路、方法,那就更感激不尽啦!

2023/8/4 15:45
加载中...