1.模拟题一般是一类头疼的问题,有时候一些错误更是让我们红橙作伴,潇潇洒洒的交一发wa一发
2.有些模拟题很简单,看一下按照题目的意思模拟一遍就可以了,只需要注意一些细节就好,还有些模拟题虽然看起来简单但却无从下手
下面这个几个模拟题对于蒟蒻的我来说是很好的学习例题
不为什么就想记录一下自己学习的过程,把自己如何思考,如何学习,如何解决一一说清楚,希望你们也能从中受益~
题目描述
wjw最近运气极其差,什么roll点1-100连着十次都是个位数啊,买个珍珠奶茶没有珍珠啊,吃方便面没有调料包啊…
迷信的wjw觉得,一定是因为这个月的13号正好是星期五,才会导致他的运气这么差。
现在他想知道,在某个年份中,有多少个月的13号是星期五,这样他才可以提前做好心理准备。
PS.已知1998年1月1日是星期四,输入的年份肯定大于或等于1998年。
输入
input
输入只有一行,表示年份(大于等于1998年)
输出
output
输出只有一行,表示这一年中有多少个月的13号是星期五
样例输入
1998
样例输出
3
提示
说明:(1)一年有365天,闰年有366天,所谓闰年,即能被4整除且不能被100整除的年份,或是既能被100整除也能被400整除的年份;
PS:
这种题目第二次遇见,遇见的时候我想起了第一次那种手无足措的感觉,虽然事后看了大佬的题解,但却用了很长时间来消化,所以我觉得有必要来记录自己学习的过程,虽然艰辛,但是得到AC的那一刻,内心是喜悦的,谁不是一直在追求AC的路上呢?
分析题目
题目是想找出一年中有多少个月份的13号是星期五,很显然这是一道模拟题
AC代码
#include
#define ll long long
using namespace std;
const int inf = 0x3f3f3f3f;
const int maxn = 1e6 + 5;
int a[13] = {
0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int b[13] = {
0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
char c[maxn];
int judge(int y)
{
if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
return 1;
return 0;
}
int main()
{
int y, ans, num;
while (~scanf("%d", &y))
{
int num = 4, ans = 0; //num是最初13号与9号相差的天数
for (int i = 1998; i < y; ++i)
{
num += 365;
if (judge(i)) //如果是闰年就是366天
++num;
}
if (judge(y))
{
for (int i = 1; i <= 12; ++i)
{
if (num % 7 == 0) //找到了就加一
++ans;
num += b[i]; //继续下一个操作
}
}
else
{
for (int i = 1; i <= 12; ++i)
{
if (num % 7 == 0)
++ans;
num += a[i];
}
}
printf("%d\n", ans);
}
return 0;
}
下面这个题目就稍显麻烦一些,不过大致思路还是一样的,如果会了上面那个,下面这个稍微难一点的就迎刃而解了(●′ω`●)
题目描述
Inter和AMD刚刚在上个学期确定了恋爱关系,但是由于要期末考试,他们没法have a appointment。
所以他们打算在2月14日情人节那天一起出去。恰恰最近疫情爆发,Inter和AMD都被关在机箱里面不准出来。
于是Inter就想找一个普通而又特殊的日子再次和AMD约会。 要是个周五,然后这个周五是当月的20号岂不美哉?
你能帮帮Inter找出当年中既是周5,又是20号的月份吗。(找不到Inter就只能伤心的回去挤牙膏了)
输入
输入包含多组数据,每组数据包含一个正整数year(2000≤year≤9999)。
输出
对应每一组数据,输出所有符合条件的月份,月份之间用空格隔开。
如果当年不存在20号是星期五的月份,就输出一行jiyagao。
样例输入
2000
2001
2002
样例输出
10
4 7
9 12
PS : 不一样的是这里需要输出是哪几个月份,而不是有几个月份,代码大同小异
#include
using namespace std;
int a[13] = {
0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int b[13] = {
0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int judge(int y)
{
if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
return 1;
return 0;
}
int main()
{
int y, ans, num, s[13];
while (cin >> y)
{
num = 6, ans = 0;
for (int i = 2000; i < y; ++i)
{
num += 365;
if (judge(i))
++num;
}
if (judge(y))
{
for (int i = 1; i <= 12; ++i)
{
if (num % 7 == 0)
s[++ans] = i;
num += b[i];
}
}
else
{
for (int i = 1; i <= 12; ++i)
{
if (num % 7 == 0)
s[++ans] = i;
num += a[i];
}
}
if (ans)
{
for (int i = 1; i < ans; ++i)
cout << s[i] << ' ';
cout << s[ans] << endl;
}
else
cout << "jiyagao" << endl;
}
return 0;
}
诗读百遍,其义自见。“行到水穷处,坐看云起时” 送给此刻面对人生困境和艰难的你我他 |
---|