浙大版《C语言程序设计(第3版)》题目集 - 学习笔记 - 编程题 - 习题3-2 高速公路超速处罚

https://pintia.cn/problem-sets/12/problems/278

习题3-2 高速公路超速处罚(15 分)
按照规定,在高速公路上行使的机动车,达到或超出本车道限速的10%则处200元罚款;若达到或超出50%,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。

输入格式:

输入在一行中给出2个正整数,分别对应车速和限速,其间以空格分隔。

输出格式:

在一行中输出处理意见:若属于正常行驶,则输出“OK”;若应处罚款,则输出“Exceed x%. Ticket 200”;若应吊销驾驶证,则输出“Exceed x%. License Revoked”。其中x是超速的百分比,精确到整数。

输入样例1:

65 60

输出样例1:

OK

输入样例2:

110 100

输出样例2:

Exceed 10%. Ticket 200

输入样例3:

200 120

输出样例3:

Exceed 67%. License Revoked

我的初版代码,大概是这样的:

#include 

void rule(int speed, int limit);

int main()
{
  int speed, limit;

  if(scanf("%d %d", &speed, &limit) == 2)
  {
    rule(speed, limit);
  }

  return 0;
}

void rule(int speed, int limit)
{
  if( speed>=0 && speed*1.10)
  {
    printf("OK\n");
  }
  else if(speed*100>=limit*110 && speed*1.50)
  {
    printf("Exceed %d%%. Ticket 200\n", (int)(100.00*(speed-limit)/limit));
  }
  else if(speed>=limit*1.50)
  {
    printf("Exceed %d%%. License Revoked\n", (int)(100.00*(speed-limit)/limit));
  }
}

报错:

测试点 提示  结果  耗时  内存
0   sample 1等价,正常   答案正确    2 ms    128KB
1   sample 2等价,罚款   答案错误    2 ms    256KB
2   sample 3等价,吊销驾照 答案正确    2 ms    128KB

即这个用例:

输入样例2:

110 100
输出样例2:

Exceed 10%. Ticket 200

拿到本地调试:

$ gcc q.c
$ ./a.out
110 100
OK

显然是if( speed>=0 && speed这一行代码判断出了问题。

我大概明白错误的原因了,应该是limit*1.10这个浮点数在计算机中不能精确地表示,进而导致判断的结果是speed小于limit*1.10

将这一行修改为speed>=0 && speed*10

新一版的代码:

#include 

void rule(int speed, int limit);

int main()
{
  int speed, limit;

  if(scanf("%d %d", &speed, &limit) == 2)
  {
    rule(speed, limit);
  }

  return 0;
}

void rule(int speed, int limit)
{
  if( speed>=0 && speed*10*11)
  {
    printf("OK\n");
  }
  else if(speed*100>=limit*110 && speed*1.50)
  {
    printf("Exceed %d%%. Ticket 200\n", (int)(100.00*(speed-limit)/limit));
  }
  else if(speed>=limit*1.50)
  {
    printf("Exceed %d%%. License Revoked\n", (int)(100.00*(speed-limit)/limit));
  }
}

本地测试结果:

$ gcc q.c
$ ./a.out
110 100
Exceed 10%. Ticket 200

但是在在线编程平台上,仍然测试不通过,这个原因就不得而知了。算了,暂时跳过这个问题吧。

参考文献:
1. 《C语言程序设计(第3版)》 - 浙江大学;
2. 浙大版《C语言程序设计(第3版)》题目集。

你可能感兴趣的:(C语言,编程语言)