对于牛客网而言,不少人即使爱又是充满了恨,毕竟刷着牛客网的习题,一方面知识长多了不少,但是对于牛客网的习题难度却是充满了怀疑,笔者目前小白一枚,仅通过牛客网进行C语言的初步练习,但是简单题目却是少之又少!基本算下来,每一道靠自己琢磨下来的习题,都得将近1个多小时,而且这还仅仅是容易简单的练习题,现在笔者在怀疑,将来对于难度稍微大点的练习题该如何去处理!
话不多说,下面来进入对牛客网的习题进行解答!获得某年某月有多少天!
描述
KiKi想获得某年某月有多少天,请帮他编程实现。输入年份和月份,计算这一年这个月有多少天。
输入描述:
多组输入,一行有两个整数,分别表示年份和月份,用空格分隔。
输出描述:
针对每组输入,输出为一行,一个整数,表示这一年这个月有多少天。
示例1
输入 2008 2
输出 29
对于这道题,我们需要知道,每一年的每一月有多少天(注意闰年的2月特殊情况)
一个月有31的天的月份有:1月,3月,5月,7月,8月,10月,12月;
一个月有30的天的月份有:4月,6月,9月,11月;
较为特殊的月份为: 2月(28或者29天);
因此对比上述情况,我们可以用switch{ case: break; }结构来进行书写代码
但是需要注意牛客网要求多组输入,因此又用到while()来实现多组输入!
下面请看笔者的代码:
#include <stdio.h> int main() { int year = 0; int month = 0; while (scanf("%d %d", &year, &month)==2) { switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: printf("%d\n", 31); //月份为31的天数 break; //跳出循环 case 4: case 6: case 9: case 11: printf("%d\n", 30); //月份为30的天数 break; case 2: { if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) printf("%d\n", 29); else printf("%d\n", 28); } } } return 0; }
上述代码将月份按照三种情况来进行分析!
代码的运转结果为:
实现了牛客网的要求,因此笔者也如愿以偿的得到了牛客网的.................恭喜你通过本题!
虽然逻辑上显得清晰易懂,但是代码不够简洁!
最近刚刚学习了函数,对于函数的简单代码,逻辑清晰,目的明确,兴趣大增,因此我们可以用函数的方法来进行些许简化!
#include <stdio.h> int is_leap_year(int year) { return (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)); //判断是否为闰年,是闰年就返回值为非0值(1) } int main() { int year = 0; int month = 0; int days[13] = { 0,31,28,31,20,31,30,31,31,30,31,30,31 }; //将12个月的天数全部列在一个数组里面,输入month的值,则就输出数组中对应的该值 //将数组定义为13的原因为:数组首元素的下标为:days[0]但是月份最小为1月 while (scanf("%d %d", &year, &month) == 2) { //涉及scanf()的返回值问题 int day = days[month]; if (is_leap_year(year) && month == 2) { day++; //闰年2月比普通2月多一天则进行++ } printf("%d\n", day); } return 0; }
在该代码段中,最重要的主要有一下两点:请大家多多注意!
1. int days[13] = { 0,31,28,31,20,31,30,31,31,30,31,30,31 };
//将12个月的天数全部列在一个数组里面,输入month的值,则就输出数组中对应的该值
//将数组定义为13的原因为:数组首元素的下标为:days[0]但是月份最小为1月
2. while (scanf("%d %d", &year, &month) == 2)
//涉及scanf()的返回值问题; scanf()输入%d %d一共有两个数字,返回值为2,即判断2==2是否成立,如果成立则进入while循环,否则,则不进入循环!
到此为止,该文章通过牛客网练习题已经将笔者想要表达的内容如实表现出来,但是对于一些没有涉及到的不足之处,请大家多多斧正