日历中的数字
链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
题目描述
ElemenT马上就要毕业了,他打开日历看了看时间。发现日历上的日期都是2017-04-04这样的格式的,月和日如果不足2位数,前面都会补充0。
给定一个年份和月份,ElemenT把那个月的日期都按上述格式写到纸上,他现在想知道某种数字出现了多少次。
输入描述:
多组输入 每组输入一行,有3个数字y,m,x(1000<=y<=3000,1<=m<=12,0<=x<=9),分别代表年份,月份,和他想知道哪个数字出现的次数。
输出描述:
每组输出一个整数,表示数字x在这个月的日期里出现了多少次。
这是一个优秀的例子,认真思考,有助于我们初学者理解 函数 与 字符串 的有关知识
1.主函数
int main()
{
int y,m,x;
//y为年,m为月,x为所求数字
while(scanf("%d%d%d",&y,&m,&x) == 3)
{ //监测输入是否合法
int result = leap(y,m,x);
printf("%d\n",result);
}
return 0;
}
2.leap函数,注释都在代码里
int leap(int y, int m, int x)
{
//计算该月有几天
int days;
if(m == 2)
{
if(y % 400 == 0 || (y % 4 == 0 && y % 100 != 0))
{
days = 29;
}else{
days = 28;
}
}else if(m == 4 ||m == 6 ||m == 9||m == 11)
{
days = 30;
}else{
days = 31;
}
//统计数字出现次数
int count = 0;
char date_str[11];
for(int day = 1;day <= days;day++)
{
sprintf(date_str,"%04d-%02d-%02d",y,m,day);
//将这一日期的年,月,日储存在字符数组中以便遍历
for(int i = 0;i < strlen(date_str);i++)
{
if(date_str[i] == x + '0')
//x + '0'是为了将int转化为char
count++;
}
}
return count;
}
3.完整代码
#include <stdio.h>
#include <string.h>
int leap(int y, int m, int x)
{
//计算该月有几天
int days;
if(m == 2)
{
if(y % 400 == 0 || (y % 4 == 0 && y % 100 != 0))
{
days = 29;
}else{
days = 28;
}
}else if(m == 4 ||m == 6 ||m == 9||m == 11)
{
days = 30;
}else{
days = 31;
}
//统计数字出现次数
int count = 0;
char date_str[11];
for(int day = 1;day <= days;day++)
{
sprintf(date_str,"%04d-%02d-%02d",y,m,day);
//将这一日期的年,月,日储存在字符数组中以便遍历
for(int i = 0;i < strlen(date_str);i++)
{
if(date_str[i] == x + '0')
//x + '0'是为了将int转化为char
count++;
}
}
return count;
}
int main()
{
int y,m,x;
//y为年,m为月,x为所求数字
while(scanf("%d%d%d",&y,&m,&x) == 3)
{ //监测输入是否合法
int result = leap(y,m,x);
printf("%d\n",result);
}
return 0;
}