L1-5 胎压监测(天梯赛2020)

L1-073 胎压监测 (15分)
小轿车中有一个系统随时监测四个车轮的胎压,如果四轮胎压不是很平衡,则可能对行车造成严重的影响。

L1-5 胎压监测(天梯赛2020)_第1张图片

让我们把四个车轮 —— 左前轮、右前轮、右后轮、左后轮 —— 顺次编号为 1、2、3、4。本题就请你编写一个监测程序,随时监测四轮的胎压,并给出正确的报警信息。报警规则如下:

如果所有轮胎的压力值与它们中的最大值误差在一个给定阈值内并且都不低于系统设定的最低报警胎压,则说明情况正常,不报警;
如果存在一个轮胎的压力值与它们中的最大值误差超过了阈值,或者低于系统设定的最低报警胎压,则不仅要报警,而且要给出可能漏气的轮胎的准确位置;
如果存在两个或两个以上轮胎的压力值与它们中的最大值误差超过了阈值,或者低于系统设定的最低报警胎压,则报警要求检查所有轮胎。
输入格式:
输入在一行中给出 6 个 [0, 400] 范围内的整数,依次为 1~4 号轮胎的胎压、最低报警胎压、以及胎压差的阈值。

输出格式:
根据输入的胎压值给出对应信息:

  1. 如果不用报警,输出 Normal;

  2. 如果有一个轮胎需要报警,输出 Warning: please check #X!,其中 X 是出问题的轮胎的编号;

  3. 如果需要检查所有轮胎,输出 Warning: please check all the tires!

总结:按理来说是简单题,
原因:1.只有一个轮胎不正常的时候,也就是cnt为1 的时候,不只是会进入该if语句一次,当后面没有轮胎都正常时,cnt依旧为1但是此时遍历的轮胎序号已经发生变化,也就是i是已经变了的,相应的index的值必然也会变了,
2.轮胎的序号和数组的下标并非相等,而是相差1的关系,也正是应为如此,样例2通过了,两个错误一中和,答案就不小心正确了,
改进:还是觉得,得耐下心,用每个样例带着走一遍,如果,当时,把第二个样例走一步,这个错误肯定就查到,,,,

输入样例 1242 251 231 248 230 20
输出样例 1:
Normal
输入样例 2242 251 232 248 230 10
输出样例 2:
Warning: please check #3!
输入样例 3240 251 232 248 240 10
输出样例 3:
Warning: please check all the tires!
# include 
int main(){
	int a[5];
	int min_num,cha;
	scanf("%d%d%d%d",&a[0],&a[1],&a[2],&a[3]);
	scanf("%d%d",&min_num,&cha);
	int max=a[0];
	//找其中最大的值 
	for(int i=1;i<4;i++){
		if(max<a[i]){
			max = a[i];
		}
	}
	int cnt=0;
	int index = 0;//记录那一个轮胎的下标 


	for(int i=0;i<4;i++){
		if(max-a[i]>cha||a[i]<min_num){
			cnt++;
			index=i;  //修改后的正确代码 
		}
	//	if(cnt==1){//考虑不周:如果是单独把cnt等于1拿出来,
//可能会发生不进入上面的判断语句,也就是cnt一直为一,但接着更新index值 所以这条判断没有意义
//在这里不需要担心多次进入上面条件语句时index值不是第一个出问题的轮胎的编码,
//因为是多个轮胎的话根本不需要用到index ,所以说这里根本就是多此一举 
	//	index=i;printf("%d~\n",index);
	//	}
	}
	
	if(cnt==0){
		printf("Normal\n");
	} 
	else if(cnt==1){
		//同样的,忽略了轮胎的编码和数组的下标不是相等的,而是差一个一,所以结尾需要加一
		printf("Warning: please check #%d!",index+1);
		
	}
	else if(cnt>=2){ 
		printf("Warning: please check all the tires!\n");
	}

} 

你可能感兴趣的:(2020天梯)