前言
为准备大四华为笔试,决定使用学长推荐的《算法笔记》一书来学习,配套有《算法笔记·上机训练实战指南》,希望学习完此书,刷完力扣,能够通过笔试,为拿到大厂offer奠定基础💪
此文为实战系列第二篇。
我的笔记
1.问题 C: 例题4-3 比较交换3个实数值,并按序输出
该问题我思索时间较多,因为一开始将问题复杂化了,足足分了6种情况讨论,让人头都大了😨,不知代码从何敲起;
幸好又读了一遍题目,抓住题目中的重点
“输入3个实数a, b, c,······按照从小到大的顺序输出这三个数a, b, c。”
输入输出字母顺序不变,因此完全可以,将大值往后挪,小值前调,这样考虑情况简单了不少,只需考虑前面的数一定比后面的小即可;
最终很快写完了代码。
#include <stdio.h>
int main(){
double a, b, c, t;
scanf("%lf %lf %lf", &a, &b, &c);
if(a>b) {
t = a;
a = b;
b = t;
if(a>c) {
t = a;
a = c;
c = t;
}
if(b>c) {
t = b;
b = c;
c = t;
}
}
else {
if(a>c) {
t = a;
a = c;
c = b;
b = t;
}
else if(b>c) {
t = b;
b = c;
c = t;
}
}
printf("%.2f %.2f %.2f\n", a, b, c);
return 0;
}
(看着代码,忽然想到,是不是可以建立一个函数,用来交换两个数字呢?待学完函数一课,回来再做修改🥰)
2. 奖金计算问题,if else 嵌套代码可以精简一点
另外,本来想着是否可以使用switch函数,但回顾相关知识,case中需要是常量表达式,故弃之,啧,switch函数应用范围有点窄呀🤔
#include <stdio.h>
int main(){
double i, m;
scanf("%lf", &i);
if(i<=100000)
m = i*0.1;
else if(i<=200000)
m = 10000 + (200000-i)*0.075;
else if(i<=400000)
m = 17500 + (400000-i)*0.05;
else if(i<=600000)
m = 27500 + (600000-i)*0.03;
else if(i<=1000000)
m = 33500 + (1000000-i)*0.015;
else
m = 39500 + (i-1000000)*0.01;
printf("%.2f\n", m);
return 0;
} //可将一堆大括号省略