牛客网练习题,获得某年某月有多少天!

简介: 牛客网练习题,获得某年某月有多少天!

对于牛客网而言,不少人即使爱又是充满了恨,毕竟刷着牛客网的习题,一方面知识长多了不少,但是对于牛客网的习题难度却是充满了怀疑,笔者目前小白一枚,仅通过牛客网进行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;
}


上述代码将月份按照三种情况来进行分析!


代码的运转结果为:


0a2653c851af460fa595bd959398a8f1.png


实现了牛客网的要求,因此笔者也如愿以偿的得到了牛客网的.................恭喜你通过本题!


6de278e6d6694ce5bb08e7e842b7e74b.png


虽然逻辑上显得清晰易懂,但是代码不够简洁!


最近刚刚学习了函数,对于函数的简单代码,逻辑清晰,目的明确,兴趣大增,因此我们可以用函数的方法来进行些许简化!

#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循环,否则,则不进入循环!


到此为止,该文章通过牛客网练习题已经将笔者想要表达的内容如实表现出来,但是对于一些没有涉及到的不足之处,请大家多多斧正


相关文章
|
4月前
|
C语言
蓝桥杯练习题
蓝桥杯练习题包括6道C语言编程题:1. 判断三位数是否为水仙花数;2. 输出区间质因数分解;3. 将秒转换为&#39;H:M:S&#39;格式;4. 判断闰年;5. 删除可被整除元素并排序数组,数字转字母;6. 分类比较两个字符串关系。每题涉及不同逻辑操作,适合编程初学者练习。
33 3
|
算法 C++
蓝桥杯练习题七 - 第几天(c++)
蓝桥杯练习题七 - 第几天(c++)
120 0
蓝桥杯练习题七 - 第几天(c++)
|
存储 C++
蓝桥杯练习题六 - 大数乘法(c++)
蓝桥杯练习题六 - 大数乘法(c++)
176 0
蓝桥杯练习题六 - 大数乘法(c++)
练习题之牛客网
练习题之牛客网
100 0
原来牛客网练习题还能这么做?
原来牛客网练习题还能这么做?
104 0
|
机器学习/深度学习
牛客网练习题(函数部分)
牛客网练习题(函数部分)
87 0
牛客网——杨辉三角
牛客网——杨辉三角
306 0
华为机试练习题汇总
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunnyYoona/article/details/50458481 华为机试练习广场: [华为机试练习题]1.
2724 0