社区讨论

站外题,50分,求大佬改代码

学术版参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@lo1zieqm
此快照首次捕获于
2023/10/23 05:32
2 年前
此快照最后确认于
2023/11/03 05:56
2 年前
查看原帖
问题 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次
我的代码
CPP
#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;
}
如果有大佬给我讲讲什么新的思路、方法,那就更感激不尽啦!

回复

3 条回复,欢迎继续交流。

正在加载回复...