【第13届蓝桥杯C/C++B组省赛】顺子日期
答案:14
1.数组办法解决
思路:前四个元素已经确定,分别枚举其他元素的合法性
#include <stdio.h>
int main()
{
int a[8] = {2,0,2,0,0,0,0,0};
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int i,j;
int count = 0;
for(i = 1;i <= 12;++i)
{
a[4] = i / 10;
a[5] = i % 10;
for(j = 1;j <= month[i];++j)
{
a[6] = j / 10;
a[7] = j % 10;
if((a[4]+1==a[5] && a[5]+1==a[6]) || (a[5]+1==a[6] && a[6]+1==a[7]))
{
count++;
}
}
}
printf("%d\n",count);
return 0;
}
2.函数
思路:将每个简单功能封装成函数,提高代码复用性
#include<stdio.h>
int is_straight_number(int a,int b,int c)
{
return (b == a + 1) && (c == b + 1);
}
int is_straight_date(int year,int month,int days)
{
int date = year * 10000 + month * 100 + days;
int first = (year * 10000000) % 10;
int second = (year * 1000000) % 10;
int third = (year * 100000) % 10;
int fourth = (year * 10000) % 10;
int fifth = (year * 1000) % 10;
int sixth = (year * 100) % 10;
int seventh = (year * 10) % 10;
int eighth = year % 10;
if(
is_s_number(first,second,third) ||
is_s_number(second,third,fourth)||
is_s_number(third,fourth,fifth) ||
is_s_number(fourth,fifth,sixth)||
is_s_number(fifth,sixth,seventh)||
is_s_number(sixth,seventh,eighth)
)
{
return 1;
}
return 0;
}
int get_days_in_month(int month)
{
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
{
return 31;
}
if (month == 4 || month == 6 || month == 9 || month == 11)
{
return 30;
}
return 28;
}
int main(int argc, char *argv[])
{
int ans = 0;
int month;
int day;
for(month = 1;month <= 12;++month)
{
int days = get_days_in_month(month);
for(day = 1;day <= days;++day)
{
if(is_s_date(2022,month,day))
{
ans++;
}
}
}
printf("%d\n",ans);
return 0;
}