题目描述
ABC公司决定给员工加薪,加薪情况如下所示:
薪水 涨薪幅度
0 - 400.00 15%
400.01 - 800.00 12%
800.01 - 1200.00 10%
1200.01 - 2000.00 7%
超过 2000.00 4%
读取员工的工资,计算并输出员工的新工资,以及员工增加的收入和涨薪幅度。
输入格式
共一行,包含一个保留两位小数的浮点数。
输出格式
输出格式如下所示:
第一行输出”Novo salario: X”,X表示员工新工资,保留两位小数。
第二行输出”Reajuste ganho: Y”,Y表示员工增加的具体收入数值,保留两位小数。
第三行输出”Em percentual: Z”,Z表示涨薪幅度,注意用百分比表示。
数据范围
0≤原工资≤2500.00
输入样例:
400.00
输出样例:
Novo salario: 460.00
Reajuste ganho: 60.00
Em percentual: 15 %
我的算法
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
float sal;
cin>>sal;
if(sal>=0&&sal<=400.00){
printf("Novo salario: %.2f\n",sal+sal*0.15);
printf("Reajuste ganho: %.2f\n",sal*0.15);
printf("Em percentual: 15 %%");
}
else if(sal>=400.01&&sal<=800.00){
printf("Novo salario: %.2f\n",sal+sal*0.12);
printf("Reajuste ganho: %.2f\n",sal*0.12);
printf("Em percentual: 12 %%");
}
else if(sal>=800.01&&sal<=1200.00){
printf("Novo salario: %.2f\n",sal+sal*0.10);
printf("Reajuste ganho: %.2f\n",sal*0.10);
printf("Em percentual: 10 %%");
}
else if(sal>=1200.01&&sal<=2000.00){
printf("Novo salario: %.2f\n",sal+sal*0.07);
printf("Reajuste ganho: %.2f\n",sal*0.07);
printf("Em percentual: 7 %%");
}
else{
printf("Novo salario: %.2f\n",sal+sal*0.04);
printf("Reajuste ganho: %.2f\n",sal*0.04);
printf("Em percentual: 4 %%");
}
return 0;
}
要注意一个地方,在printf()中双引号输出一个%时是输不出来的,要两个%%才输出一个%
![]()
优化算法
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
float sal,x;
cin>>sal;
if(sal>=0&&sal<=400.00)
x=0.15;
else if(sal>=400.01&&sal<=800.00)
x=0.12;
else if(sal>=800.01&&sal<=1200.00)
x=0.10;
else if(sal>=1200.01&&sal<=2000.00)
x=0.07;
else
x=0.04;
printf("Novo salario: %.2f\n",sal+sal*x);
printf("Reajuste ganho: %.2f\n",sal*x);
printf("Em percentual: %.0f %%",x*100);
return 0;
}
第一个代码中最后虽然只输出三个printf,但每个else中都有三个printf,出现了重复,以后出现重复的代码要想法变得简约!
# include <iostream> # include <iomanip> using namespace std; int main(){ double a,d; int s; cin >> a; if (a <= 400.00) s = 15; else if (a <= 800.00) s = 12; else if (a <= 1200.00) s = 10; else if (a <= 2000.00) s = 7; else s = 4; d = a + a * s / 100; cout << "Novo salario: " << fixed << setprecision(2) << d << endl; cout << "Reajuste ganho: " << fixed << setprecision(2) << a * s / 100 << endl; cout << "Em percentual: " << s << " %"; }
这个判断不简洁,只需单边判断就可
深感cin类与printf类各有各的优势‘
#include<iostream> #include<cmath> using namespace std; int main() { double a[15] = {0.15, 0.15, 0.12, 0.1, 0.07, 0.07, 0.04, 0.04, 0.04}; double n; cin >> n; int m = ceil(n / 400); printf("Novo salario: %.2lf\n", n * (1 + a[m])); printf("Reajuste ganho: %.2lf\n", n * a[m]); printf("Em percentual: %d %\n", (int)(a[m] * 100)); }
为什么最后一行输出需要加一个\n,不然输出的格式没有%
这里需要用“%%”转译为%
#include<cstdio> int main() { double salary; scanf("%lf",&salary); if(salary>=0){ if(salary<=400) printf("Novo salario: %.2lf\nReajuste ganho: %.2lf\nEm percentual: %d %%",1.15*salary,1.15*salary-salary,15); else if(salary<=800) printf("Novo salario: %.2lf\nReajuste ganho: %.2lf\nEm percentual: %d %%",1.12*salary,1.12*salary-salary,12); else if(salary<=1200) printf("Novo salario: %.2lf\nReajuste ganho: %.2lf\nEm percentual: %d %%",1.10*salary,1.10*salary-salary,10); else if(salary<=2000) printf("Novo salario: %.2lf\nReajuste ganho: %.2lf\nEm percentual: %d %%",1.07*salary,1.07*salary-salary,7); else printf("Novo salario: %.2lf\nReajuste ganho: %.2lf\nEm percentual: %d %%",1.04*salary,1.04*salary-salary,4); } return 0; }
第二个确实挺优雅
#include [HTML_REMOVED]
using namespace std;
int main(){
double s;
float i;
cin >> s;
if(s>=0 && s<=400.00){
i=1.15;
}
else if(s>400.01 && s<=800.00){
i=1.12;
}
else if(s>800.01 && s<=1200.00){
i=1.10;
}
else if(s>1200.01 && s<=2000.00){
i=1.07;
}
else{
i=1.04;
}
printf(“Novo salario: %.2lf\n”,si);
printf(“Reajuste ganho: %.2lf\n”,si-s);
printf(“Em percentual: %d “,int((i+0.001-1)*100));
cout<<”%”;
return 0;
}
写的很好
sal=400会出错