题二 电费收取
供电公司对每月电费在100度以下的普通客户每度电收0.5元;
超过100度低于300度超过部分每度收0.8元;
超过300度低于1000度超过部分每度收1.2元;
超过1000度超过部分每度收2元.
输入客户的用电度数,求应收电费的金额.
求用switch写出来,我头都想爆了。
因为从100到1000所以除以100,判断商1-10中的哪一个就行了
#include<iostream>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
int tmp = n/100;
switch(tmp)
{
case 0://低于100
cout<<n*0.3<<endl;
break;
case 1:
case 2:
case 3://低于300
cout<<30+(n-100)*0.8<<endl;
break;
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10://低于1000
cout<<30+160+(n-300)*1.2<<endl;
break;
default://超过1000
cout<<30+160+840+(n-1000)*2<<endl;
break;
}
}
return 0;
}
明显是标准的if...else if...else语句的逻辑,为何用switch
因为情况太多,如果用if...else if...else的话需要四个,消耗太多内存,并且浪费运行时间。用switch时只需要比较一次就可以。
(个人见解,希望对你有帮助)
#include
#include
using namespace std;
int main()
{
cout << "请输入用电度数:\n";
double df, dushu; //df代表电费,dushu代表用电度数
cin >> dushu;
switch (int(dushu / 100))
{
case 0:
df = 0.5*dushu;
break;
case 1: case2:
df = 0.5 * 100 + (dushu - 100)*0.8;
break;
case 3:case 4:case 5:case 6:case 7:case 8:case 9:
df = 0.5 * 100 + (300 - 100)*0.8 + (dushu - 300)*1.2;
break;
default:
df = 0.5 * 100 + (300 - 100)*0.8 + (1000 - 300)*1.2 + (dushu - 1000)*1.5;
break;
}
cout << "电费收取为: " << df << endl;
system("pause");
return 0;
}
追求效率时代我也这样想过,尽量提高运行效率,实际上现在的电脑性能严重过剩,根本不用过多考虑效率问题了,关键把程序写规范,并利于以后的更新维护,太多的技巧其实并没有什么用。
试想,如果将来要把这个收费的分段点调整下,你不是又要重新写一段代码。