洛谷B2047 分段函数

先看题目

题目描述

编写程序,计算下列分段函数 y=f(x)y=f(x) 的值。

当 0 \le x<50≤x<5 时,y=-x+2.5y=−x+2.5。

当 5 \le x<105≤x<10 时,y=2-1.5(x-3)(x-3)y=2−1.5(x−3)(x−3)。

当 10 \le x<2010≤x<20 时,y=x/2-1.5y=x/2−1.5。

输入格式

一个浮点数 xx。

输出格式

输出 xx 对应的分段函数值:f(x)f(x)。结果保留到小数点后三位。

输入输出样例

输入 #1复制

1.0

输出 #1复制

1.500

说明/提示

对于 100% 的数据 0 \le x<200≤x<20

这一题用 if 判断,对于每个范围输出对应的即可,注意保留三位小数,我用的是 cout 的 setprecision(),当然 printf 也可以。

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
	double x;
	cin >> x;
	if (x >= 0 && x < 5)
	{
		cout << fixed << setprecision(3) << -x + 2.5 << endl;
	}
	else if (x >= 5 && x < 10)
	{
		cout << fixed << setprecision(3) << 2 - 1.5 * (x- 3) * (x - 3) << endl;
	}
	else
	{
		cout << fixed << setprecision(3) << x / 2 - 1.5 << endl;
	}
	return 0;
}

还有一种方法就是按照题意模拟。

对于每个情况,分别处理并输出。

记得要开 \operatorname{double}double !

#include<bits/stdc++.h>
using namespace std;
double x, y;
signed main(){
	cin>>x;
	if(x<5) y=-x+2.5;                    //0<=x<5
	else if(x<10) y=2-1.5*(x-3)*(x-3);   //5<=x<10
	else y=x/2-1.5;                      //10<=x<20
	printf("%.3lf",y);
	return 0;
}

也可以用分支算法:

#include<bits/stdc++.h>
using namespace std;
int main(){
	double x;
	cin>>x;
	if(x>=0&&x<5){
		cout<<fixed<<setprecision(3)<<(-x+2.5)<<endl;
	}
	else if(x>=5&&x<10){
		cout<<fixed<<setprecision(3)<<(2-1.5*(x-3)*(x-3))<<endl;
	}
	else{
		cout<<fixed<<setprecision(3)<<(x/2-1.5)<<endl;
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值