四道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)表示打印两位小数


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


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


那么大家下期再见咯

相关文章
|
3月前
lanqiao OJ 1024 游园安排
lanqiao OJ 1024 游园安排
25 3
|
3月前
lanqiao OJ 拉马车
lanqiao OJ 拉马车
15 0
|
8月前
|
C++ Python
PTA12.09作业
PTA12.09作业
|
8月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-545 IQ
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-545 IQ
57 0
|
测试技术
华为机试HJ98:自动售货系统
华为机试HJ98:自动售货系统
132 1
|
测试技术
华为机试HJ77:火车进站
华为机试HJ77:火车进站
137 1
|
调度 C语言 C++
PTA L2-014 列车调度(25分)
两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道。每趟列车从入口可以选择任意一条轨道进入,最后从出口离开。在图中有9趟列车,在入口处按照{8,4,2,5,3,9,1,6,7}的顺序排队等待进入。如果要求它们必须按序号递减的顺序从出口离开,则至少需要多少条平行铁轨用于调度? 输入格式: 输入第一行给出一个整数N (2 ≤ N ≤105),下一行给出从1到N的整数序号的一个重排列。数字间以空格分隔。 输出格式: 在一行中输出可以将输入的列车按序号递减的顺序调离所需要的最少的铁轨条数。
155 0
|
机器学习/深度学习 算法
【第十五届蓝桥杯备赛(bushi,写文凑个数)】蓝桥OJ---长草
文章目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 三、知识风暴 BFS Flood Fill算法
189 0
|
人工智能 算法
算法学习 【第一周】 Ⅲ
“贪亦有道”,了解有关贪心算法的基础知识,如果我们在生活中也按照贪心算法那样去选择会是什么样的呢?
98 0
算法学习 【第一周】 Ⅲ