NOI 1.4

14:计算邮资

描述
根据邮件的重量和用户是否选择加急计算邮费。计算规则:重量在1000克以内(包括1000克), 基本费8元。超过1000克的部分,每500克加收超重费4元,不足500克部分按500克计算;如果用户选择加急,多收5元。

输入
输入一行,包含整数和一个字符,以一个空格分开,分别表示重量(单位为克)和是否加急。如果字符是y,说明选择加急;如果字符是n,说明不加急。

输出
输出一行,包含一个整数,表示邮费。

样例输入

1200 y

样例输出

17

#include <iostream>

using namespace std;

int main()
{
	int weight, cost = 8, extra;
	char h;
	cin >> weight >> h;
	if (weight > 1000){
		extra = (weight - 1000) / 500;
		((weight - 1000) % 500 != 0) ? extra += 1 : extra = extra;
		cost += extra * 4;
	}
	if (h == 'y')
		cost += 5;
	cout << cost << endl;
	return 0;
}

需要注意的是 ((weight - 1000) % 500 != 0) ? extra += 1 : extra = extra; 这一句代码,对应不足500g部分按500g计算。


04:奇偶ASCII值判断

描述
任意输入一个字符,判断其ASCII是否是奇数,若是,输出YES,否则,输出NO
例如,字符A的ASCII值是65,则输出YES,若输入字符B(ASCII值是66),则输出NO

输入
输入一个字符

输出
如果其ASCII值为奇数,则输出YES,否则,输出NO

样例输入

A

样例输出

YES

#include <iostream>

using namespace std;

int main()
{
	char x;
	int n, m;
	x = getchar();
	n = int(x);
	m = n % 2;
	if (m != 0){
		cout << "YES" << endl;
		return 0;
	}
	else{
		cout << "NO" << endl;
		return 0;
	}
}

这是一道坑题,cin和scanf()无法读取空格,只能用getchar()。


20:求一元二次方程的根

描述
利用公式 x 1 = ( − b + b 2 − 4 ∗ a ∗ c / ( 2 ∗ a ) 2 ) , x 2 = ( − b − b 2 − 4 ∗ a ∗ c / ( 2 ∗ a ) 2 ) x1 = (-b + \sqrt[2]{b^2-4*a*c/(2*a)}), x2 = (-b - \sqrt[2]{b^2-4*a*c/(2*a)}) x1=(b+2b24ac/(2a) ),x2=(b2b24ac/(2a) )求一元二次方程 a x 2 + b x + c = 0 ax^2+ bx + c =0 ax2+bx+c=0的根,其中a不等于0。

输入
输入一行,包含三个浮点数a, b, c(它们之间以一个空格分开),分别表示方程 a x 2 + b x + c = 0 ax^2 + bx + c =0 ax2+bx+c=0的系数。

输出
输出一行,表示方程的解。
b 2 = 4 ∗ a ∗ c b^2 = 4 * a * c b2=4ac,则两个实根相等,则输出形式为:x1=x2=…。
b 2 &gt; 4 ∗ a ∗ c , b^2 &gt; 4 * a * c, b2>4ac,则两个实根不等,则输出形式为:x1=…;x2 = …,其中x1>x2。
b 2 &lt; 4 ∗ a ∗ c b^2 &lt; 4 * a * c b2<4ac,则有两个虚根,则输出:x1=实部+虚部i; x2=实部-虚部i,即x1的虚部系数大于等于x2的虚部系数,实部为0时不可省略。实部 = − b / ( 2 ∗ a ) = -b / (2*a) =b/(2a), 虚部 = 4 ∗ a ∗ c − b ∗ b ) / ( 2 ∗ a ) 2 = \sqrt[2]{4*a*c-b*b)/ (2*a)} =24acbb)/(2a)

所有实数部分要求精确到小数点后5位,数字、符号之间没有空格。

样例输入

样例输入1
1.0 2.0 8.0

样例输入2
2 1 0 1

样例输出

样例输出1
x1=-1.00000+2.64575i;x2=-1.00000-2.64575i

样例输出2
x1=0.00000+1.00000i;x2=0.00000-1.00000i

#include <iostream>
#include <cmath>
#include <iomanip>

using namespace std;

int main()
{
	double a, b, c, x1, x2, real;
	cin >> a >> b >> c;
	real = -b / (2 * a);
	if (b / (2 * a) == 0) real = 0;
	if (b * b == 4 * a * c) {
		cout << fixed << setprecision(5) << "x1=x2=" << real << endl;
		return 0;
	}
	if (b * b > 4 * a * c) {
		x1 = (-b + sqrt(b*b - 4 * a*c)) / (2 * a);
		x2 = (-b - sqrt(b*b - 4 * a*c)) / (2 * a);
		cout << fixed << setprecision(5) <<"x1=" << x1 << ";" << "x2=" << x2 << endl;
		return 0;
	}
	if (b * b < 4 * a * c) {
		x1 = sqrt(4 * a * c - b * b) / (2 * a);
		x2 = sqrt(4 * a * c - b * b) / (2 * a);
		cout << fixed << setprecision(5) 
			<< "x1=" << real << "+" << x1 << "i;" 
			<< "x2=" << real << "-" << x2 << 'i' << endl;
		return 0;
	}
}

总结:1.虚数的处理:只有 b 2 &lt; 4 ∗ a ∗ c b^2 &lt; 4 * a * c b2<4ac时才会出现虚数,为了避免根号下面开一个负数,就把 b 2 b^2 b2 4 ∗ a ∗ c 4*a*c 4ac调换位置,并手动加上复数的符号 i i i
2.在测试样例输入2时发现答案是 x 1 = − 0.00000 + 1.00000 i ; x 2 = − 0.00000 − 1.00000 i x1=-0.00000+1.00000i;x2=-0.00000-1.00000i x1=0.00000+1.00000i;x2=0.000001.00000i,为了避免实部是 0 0 0的情况下前面带有负号,我们单独定义一个变量real表示根的实部,并单独检验 r e a l = 0 real=0 real=0的情况。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值