四道oj题作业

简介: 四道oj题作业

获取每月有多少天


描述

KiKi想获得某年某月有多少天,请帮他编程实现。输入年份和月份,计算这一年这个月有多少天。

输入描述:

多组输入,一行有两个整数,分别表示年份和月份,用空格分隔。

输出描述:

针对每组输入,输出为一行,一个整数,表示这一年这个月有多少天。


题目分析


每个月份的天数分别是


31 天的: 1,3,5,7,8,10,12


30 天的: 4,6,9,11


其中而二月份在闰年有29天 在非闰年有28天


那这样我们就很清楚了


我们可以先写一个函数判断是不是闰年


然后按照上面的数据判断并且返回天数就好了


我们首先写一个函数判断是闰年还是非闰年


代码如下


int judge_year(int x)
{
  if ((x%4==0 && x%100 !=0)||(x%400==0))
  {
    return 1;
  }
  else
  {
    return 0;
  }
}


好啦 第一步任务完成


下一步 我们创建两个变量 本别是year 和 mouth


再按照我们上面写的天数给它们设计返回值


代码如下


#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int judge_year(int x)
{
  if ((x%4==0 && x%100 !=0)||(x%400==0))
  {
    return 1;
  }
  else
  {
    return 0;
  }
}
int main()
{
  int year = 0;
  int mouth = 0;
  while (scanf("%d %d", &year,&mouth)!=EOF)
  {
    switch (mouth)
    {
    case 1:
      printf("%d", 31);
      break;
    case 2:
      if (judge_year(year) == 1)
        printf("%d", 29);
      else
      {
        printf("%d", 28);
      }
      break;
    case 3:
      printf("%d", 31);
      break;
    case 4:
      printf("%d", 30);
      break;
    case 5:
      printf("%d", 31);
      break;
    case 6:
      printf("%d", 30);
      break;
    case 7:
      printf("%d", 31);
      break;
    case 8:
      printf("%d", 31);
      break;
    case 9:
      printf("%d", 30);
      break;
    case 10:
      printf("%d", 31);
      break;
    case 11:
      printf("%d", 30);
      break;
    case 12:
      printf("%d", 31);
      break;
    }
        printf("\n");
  }
  return 0;
}


博主写这段代码的时候遇到了一个难点 就是不知道如何设计一个恰到好处的循环 (使用while(1)的话时间会溢出)


实际上呢 这个知识点再博主刚刚学习c语言的时候就涉及到了


使用这一行代码就可以轻松解决


while (scanf("%d %d", &year,&mouth)!=EOF)


既解决了输入的问题 又解决了循环的问题 所以说还是要多多练习 这样才能融汇贯通


复习地址


判断一个数是不是字母


描述


KiKi想判断输入的字符是不是字母,请帮他编程实现。


输入描述:

多组输入,每一行输入一个字符。

输出描述:

针对每组输入,输出单独占一行,判断输入字符是否为字母,输出内容详见输出样例。


这道题在前面的博客中又讲解 这里不再赘述


复习地址


转换大小写


知识点

大写字母转化成小写字母只需要加上32


核心代码如下


 if (ch >= 'A' && ch <= 'Z')
                printf("%c\n", ch + 32);
 if (ch >= 'a' && ch <= 'z')
                printf("%c\n", ch - 32);


这里需要注意的是输入字符的区别


这里还需要注意的有两个点


1 输入字符的时候使用getchar()

记得要用括号

例如


while ((ch=getchar()) != EOF)


如果这里没有加上括号的话就会没有结果


2 虽然getchair()一次只能拿一个字符 缓存区没有被清空 但是实际上拿到下一个字符的时候并不会执行语句

所以这一道oj题 也可以不清空内存


完整代码如下

int main()
{
    char ch;
    while ((ch=getchar()) != EOF)
    {
        char tmp;
        while ((tmp=getchar())!='\n')
        {
            ;
        }
        {
            if (ch >= 'A' && ch <= 'Z')
                printf("%c\n", ch + 32);
            if (ch >= 'a' && ch <= 'z')
                printf("%c\n", ch - 32);
        }
    }
    return 0;
}


网购


描述

KiKi非常喜欢网购,在一家店铺他看中了一件衣服,他了解到,如果今天是“双11”(11月11日)则这件衣服打7折,“双12” (12月12日)则这件衣服打8折,如果有优惠券可以额外减50元(优惠券只能在双11或双12使用),求KiKi最终所花的钱数。


数据范围:衣服价格满足 1 \le val \le 100000 \1≤val≤100000

输入描述:

一行,四个数字,第一个数表示小明看中的衣服价格,第二和第三个整数分别表示当天的月份、当天的日期、第四个整数表示是否有优惠券(有优惠券用1表示,无优惠券用0表示)。 注:输入日期保证只有“双11”和“双12”。

输出描述:

一行,小明实际花的钱数(保留两位小数)。(提示:不要指望商家倒找你钱)


这个题目没什么难度 按照题目条件嵌套 if就可以


#include<stdio.h>
int main()
{
  // 定义所有的变量
  float price;
  int day = 0;
  int month = 0;
  int flag = 0;
  float cash = 0.00f;
  //获取所有的变量
    //scanf("%.2f &d %d %d",&prise,&mouth,&day,&flag);
  scanf("%f %d %d %d", &price, &month, &day, &flag);
  if (month==11&&day==11)
  {
    cash = 0.7 * price;
    if (flag==1)
    {
      cash -=50;
      if (cash<=0)
      {
        cash = 0;
      }
    }
  }
  if (month == 12 && day == 12)
  {
    cash = 0.8 * price;
    if (flag == 1)
    {
      cash -= 50;
      if (cash <= 0)
      {
        cash = 0;
      }
    }
  }
  if ((month != 12 && day != 12) && (month != 11 && day != 11))
  {
    cash = price;
  }
  printf("%.2f\n", cash);
  return 0;
}


这里唯一需要注意的点就是浮点数的使用


取值的时候使用scanf(%f)


打印的使用print(%.2f)表示打印两位小数


以上就是本篇博客的全部内容啦 由于博主才疏学浅 所以难免会出现纰漏 希望大佬们看到错误之后能够


不吝赐教 在评论区或者私信指正 博主一定及时修正


那么大家下期再见咯

相关文章
|
1月前
lanqiao OJ 1024 游园安排
lanqiao OJ 1024 游园安排
20 3
|
6月前
|
人工智能 算法 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-914 计算器
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-914 计算器
39 0
|
6月前
蓝桥备战--分糖果OJ2928 贪心 分类讨论
蓝桥备战--分糖果OJ2928 贪心 分类讨论
65 0
|
6月前
蓝桥备战--纪念品分组OJ532,贪心证明
蓝桥备战--纪念品分组OJ532,贪心证明
28 0
|
算法
《蓝桥杯每日一题》KMP算法·AcWing 141. 周期
《蓝桥杯每日一题》KMP算法·AcWing 141. 周期
119 0
|
机器学习/深度学习 算法
【第十五届蓝桥杯备赛(bushi,写文凑个数)】蓝桥OJ---长草
文章目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 三、知识风暴 BFS Flood Fill算法
184 0
【寒假每日一题】AcWing 3400. 统计次数(补)
目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解
50 0
|
算法 程序员
力扣——算法入门计划第二天
力扣(LeetCode)是领扣网络旗下专注于程序员技术成长和企业技术人才服务的品牌。源自美国硅谷,力扣为全球程序员提供了专业的IT技术职业化提升平台,有效帮助程序员实现快速进步和长期成长。 此外,力扣(LeetCode)致力于解决程序员技术评估、培训、职业匹配的痛点,逐步引领互联网技术求职和招聘迈向专业化。
力扣——算法入门计划第二天
[学习报告]《LeetCode零基础指南》(第二讲)循环
[学习报告]《LeetCode零基础指南》(第二讲)循环
96 0
[学习报告]《LeetCode零基础指南》(第二讲)循环
|
算法
【算法作业】实验一:轮流报数与鸡兔同笼
【算法作业】实验一:轮流报数与鸡兔同笼
157 0
【算法作业】实验一:轮流报数与鸡兔同笼