社区讨论
站外题,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 条回复,欢迎继续交流。
正在加载回复...