zoukankan      html  css  js  c++  java
  • hdu 2004 成绩转换

    hdu 2004 成绩转换

    link

    题目描述

    Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 185104 Accepted Submission(s): 80860

    Problem Description
    输入一个百分制的成绩t,将其转换成对应的等级,具体转换规则如下:
    90~100为A;
    80~89为B;
    70~79为C;
    60~69为D;
    0~59为E;

    Input
    输入数据有多组,每组占一行,由一个整数组成。

    Output
    对于每组输入数据,输出一行。如果输入数据不在0~100范围内,请输出一行:“Score is error!”。

    Sample Input
    56
    67
    100
    123

    Sample Output
    E
    D
    A
    Score is error!

    Author
    lcy

    问题解答

    以下给出自己用的两种代码:
    方法一:(switch语句判断)

    #include <stdio.h>
    
    int main()
    {
        int t;
        while(scanf("%d",&t)!=EOF)
        {
          if(t>100||t<0) printf("Score is error!
    ");
          else
          {
              switch(t/10)
                {
                    case 0 ... 5: printf("E
    ");break;
                    case 6:printf("D
    ");break;
                    case 7:printf("C
    ");break;
                    case 8:printf("B
    ");break;
                    case 9 ... 10: printf("A
    ");break;
                    default:printf("Score is error!
    ");break;
                }
          }
        }
        return 0;
    }
    

    笔记1

    1. 第8行,必须加上这个判断语句if(t>100||t<0) printf(“Score is error! ”);如果单用switch(t/10),会导致-1~-9数据测试失败,结果失真。
    2. 第11行,switch语句常用于断点式判断,但不可能写case 0,case 1,case 2,……,case 100一百多个判断吧。所以用t/10来实现,此处t为整形,那么t/10意味着取整;若t是float型之类的,则t/10就是一般意义上的除法。
    3. switch语句的每个case后面通常来说要加break语句跳出循环(太基础了,书上一般都会有讲解,在这里就不解释了)。此外,case后面跟的多条语句可以不用{花括号}括起来。

    方法二:(if…else if语句判断)

    #include <stdio.h>
    int main()
    {
     int t;
     while(scanf("%d",&t)!=EOF)
     {
      if(t<=100&&t>=90) printf("A
    ");
      else if(t<=89&&t>=80) printf("B
    ");
      else if(t<=79&&t>=70) printf("C
    ");
      else if(t<=69&&t>=60) printf("D
    ");
      else if(t<=59&&t>=0) printf("E
    ");
      else printf("Score is error!
    ");
     }
     return 0;
    }
    

    笔记2

    1. 此道题用这种做法明显更为简便以及可视化程度高。

    PS:悄悄地在最后吐槽一下,这个毒瘤题目耗了我一天的时间QAQ。题目没有看清楚,一直想歪了,幻想着测试文件会给出一个字母或者其他非数字内字符进行测试。然后就想用scanf("%d",&t)==1来判断用户输入的是不是规定的数字,如果不是,就用getchar()吞掉。但问题是必须要同时保证该程序可以输入多组数据,直至测试文件结束,那就意味着我必须要用scanf("%d",&t)!=EOF来判断,即意味着我必须把一个字符输入两遍才能判断,否则会出现漏字符没有判断的情况!更毒瘤的是学长规定必须要用c语言来写,至今没有想到用c语言同时解决两者的办法。如果有大佬的代码调试成功,欢迎来讨论>- . -<

  • 相关阅读:
    bzoj 1176 cdq分治套树状数组
    Codeforces 669E cdq分治
    Codeforces 1101D 点分治
    Codeforces 1100E 拓扑排序
    Codeforces 1188D Make Equal DP
    Codeforces 1188A 构造
    Codeforces 1188B 式子转化
    Codeforces 1188C DP 鸽巢原理
    Codeforces 1179D 树形DP 斜率优化
    git commit -m "XX"报错 pre -commit hook failed (add --no-verify to bypass)问题
  • 原文地址:https://www.cnblogs.com/yuzilan/p/10626221.html
Copyright © 2011-2022 走看看