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+2b2−4∗a∗c/(2∗a)),x2=(−b−2b2−4∗a∗c/(2∗a))求一元二次方程
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=4∗a∗c,则两个实根相等,则输出形式为:x1=x2=…。
若
b
2
>
4
∗
a
∗
c
,
b^2 > 4 * a * c,
b2>4∗a∗c,则两个实根不等,则输出形式为:x1=…;x2 = …,其中x1>x2。
若
b
2
<
4
∗
a
∗
c
b^2 < 4 * a * c
b2<4∗a∗c,则有两个虚根,则输出:x1=实部+虚部i; x2=实部-虚部i,即x1的虚部系数大于等于x2的虚部系数,实部为0时不可省略。实部
=
−
b
/
(
2
∗
a
)
= -b / (2*a)
=−b/(2∗a), 虚部
=
4
∗
a
∗
c
−
b
∗
b
)
/
(
2
∗
a
)
2
= \sqrt[2]{4*a*c-b*b)/ (2*a)}
=24∗a∗c−b∗b)/(2∗a)
所有实数部分要求精确到小数点后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
<
4
∗
a
∗
c
b^2 < 4 * a * c
b2<4∗a∗c时才会出现虚数,为了避免根号下面开一个负数,就把
b
2
b^2
b2和
4
∗
a
∗
c
4*a*c
4∗a∗c调换位置,并手动加上复数的符号
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.00000−1.00000i,为了避免实部是
0
0
0的情况下前面带有负号,我们单独定义一个变量real表示根的实部,并单独检验
r
e
a
l
=
0
real=0
real=0的情况。