L游客求救!

L. 游客

Problem ID: 1109

Contest ID: 5697

必做题

Wrong Answer

Time Limit:

1000ms

Memory Limit:

65536kB

题目描述

某景点采取收费制度,但是这个收费制度比较奇怪,不是按照人的身高来进行收费的,是按照体重收费的。规则如下:如果游客重量不超过30公斤,每公斤0.2元;如果游客重量大于30公斤,但是不超过60公斤,超过30公斤部分按每公斤0.6元算;如果游客重量超过60公斤,不允许进入景点,报告NO。在键盘上输入游客的重量,屏幕显示最后的结果。

输入格式

一个整数,表示游客重量M(单位:公斤)

输出格式

输出一行,如果游客可以进入景点,输出为一个浮点数(结果保留2位小数点),表示费用;如果游客不可以进入景点,则输出NO

样例

Input 1

36

Output 1

9.60

数据范围

1≤M≤100

样例解释

#include<bits/stdc++.h>
using namespace std;
int main(){
    double a,sum=0,ans=0;
    cin>>a;
    if(a<=30){
    	ans=printf("%.2lf",a*0.2);
        if(a<=60){
        	sum=a-30;
        	ans=printf("%.2lf",sum*0.6);
        }
		cout<<ans;	            
    }
    else{
        cout<<"NO";
    }
    return 0;
}
3 个赞
复杂版
#include<bits/stdc++.h>
using namespace std;
int main(){
	int M;
	cin>>M;
	if(M<=30){
		printf("%.2lf",0.2*M);
	}
	else if(M<=60 && M>30){
		printf("%.2lf",(M-30)*0.6+6);
	}
	else if(M>60){
		cout<<"NO";
	}
	return 0;
}
3 个赞
简单一点点
#include<bits/stdc++.h>
using namespace std;

int main(){
    int m;
    cin>>m;
    if(m<=30){cout<<fixed<<setprecision(2)<<m*0.2;}
    if(m>30&&m<=60){cout<<fixed<<setprecision(2)<<30*0.2+(m-30)*0.6;}
    if(m>60){cout<<"NO";}
    
    return 0;
}
3 个赞

不要想复杂

3 个赞

有帮助的话给个解决方案谢谢

你的错误是:
在判断a在区间[30,60]之后,
你输出的是(a-30)*0.6
与题意不符
题目是:

如果游客重量大于30公斤,但是不超过60公斤,超过30公斤部分按每公斤0.6元算

这道题其实就是小学的分段计费问题
应该输出(a-30)*0.6+30*0.2
即输出(a-30)*0.6+6

所以 以下是我的代码:
更加简洁明了的代码 (看起来更高级一些)
思路:
注意:定义ans时要定义为double类型
先判断是否小于60,若大于,则输出“NO”
否则如下:
使用了三目运算符
若m<=30为真,则
ans=m*0.2,
否则
ans=(m-30)*0.6+6; //30*0.2=6
最后用setprecision函数精确到小数点后2位,输出ans即可

以下是代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int m,ans;
    cin>>m;
	if(m>60) cout<<"NO";
	else{
		ans=(m<=30)?m*0.2:6+(m-30)*0.6;
		cout<<fixed<<setprecision(2)<<ans;
	}
    return 0;
}
5 个赞

错了呀

2 个赞

因为放代码不能放完全正确的代码,所以我把要改的写在了思路里
可是你没把他改过来
说明你没有(认真)看思路
@叶博远

4 个赞

倒是给个解决方案啊

4 个赞

谢谢AC了

2 个赞

谢谢AC了

2 个赞

《六个月后》

1 个赞