取公里的输入,以及一、二、三等列车的行程等级(一、二、三等)。然后,该方案应根据下列标准计算旅行费用:

我不能在一个等式中完成这个程序,所以我使用if one语句完成了它。这个程序可以缩短,逻辑可以不需要if of语句来设计吗?程序的逻辑可以表示为一个单一的数学方程(仅使用算术运算符)吗?
我的守则:
//
// main.cpp
// c++
//
// Created by Aniansh Raj on 14/08/16.
// Copyright © 2016 Aniansh Raj. All rights reserved.
//
#include <iostream>
using namespace std;
int main()
{
unsigned int km, cl, amt;float r1, r2, r3;
cout<<"Enter distance in kilometer\n";
cin>>km;
cout<<"Enter Class(1, 2 or 3)\n";
cin>>cl;
switch(cl)
{
case 1:
r1=3;r2=2.5;r3=2;break;
case 2:
r1=2;r2=1.5;r3=1;break;
case 3:
r1=1.5;r2=1;r3=0.5;break;
default:
cout<<"Error!\n";
return 0;
}
if(km>=100&&km<=250)
amt=(100*r1)+(km-100)*r2;
else if(km>250)
amt=(100*r1)+(150*r2)+(amt-250)*r3;
else
amt=km*r1;
cout<<endl<<amt;
}发布于 2016-08-15 21:12:15
您可以通过多种方式重新组织代码,但我不认为您能够得到您想要的东西。
例如,可以将价格存储在数组中:
unsigned int price[3][3] = {
{300, 250, 200}, // first class, Rupee cents per km
{200, 150, 100}, // second class
{150, 100, 50}, // third class
};询问距离和类别,然后计算并打印如下所示的内容:
unsigned int amount;
if ( d <= 100 )
amount = d * price[c][0]; // c = cl - 1; considering your code
else if ( d <= 250 )
amount = 100 * price[c][0] + (d - 100) * price[c][1];
else
amount = 100 * price[c][0] + 150 * price[c][1] + (d - 250) * price[c][2];
std::cout << "distance: " << d << " price: " << amount / 100.0 << '\n';现在,我们可以简化那些(线性)方程,注意到它们的形式:
amount = constant + d * price并预先计算第一部分,这恰好与所有类相同,并且仅取决于范围。因此,给定这个数组:
unsigned int p0[] = {0, 5000, 17500};可以像下面这样重写(和“简化”)前面的片段:
unsigned int index = d < 250 ? ( d < 100 ? 0 : 1 ) : 2;
unsigned int amount = p0[index] + d * price[cl - 1][index];
std::cout << "distance: " << d << " price: " << amount / 100.0 << '\n';另一个只隐藏库函数中的条件部分的选项可以是:
unsigned int amount = std::min({
p0[0] + d * price[cl - 1][0],
p0[1] + d * price[cl - 1][1],
p0[2] + d * price[cl - 1][2]
});
std::cout << "distance: " << d << " price: " << amount / 100.0 << '\n';发布于 2016-08-14 10:20:48
严格地说,有一个等价的三元语句
if(km>=100&&km<=250)
amt=(100*r1)+(km-100)*r2;
else if(km>250)
amt=(100*r1)+(150*r2)+(amt-250)*r3;
else
amt=km*r1;以…的形式
amt = (km>=100&&km<=250) ? (100*r1)+(km-100)*r2 : (km>250) ? (100*r1)+(150*r2)+(amt-250)*r3 : km*r1;它并不像前面的块那样可读性强。如果您要寻找的是将其包含在一个公式中,那么这个应该比上面的要干净一些:
amt = km * r1 +
( km > 100 ?
km > 250 ?
150 * r2 + (km - 250) * r3 - (km - 100) * r1 :
(km - 100) * (r2 - r1) :
0 ); /* readblity */虽然我不明白为什么如果陈述是错误的。它的可读性更强,性能也是一样的。
https://stackoverflow.com/questions/38941016
复制相似问题