描述
KiKi非常喜欢网购,在一家店铺他看中了一件衣服,他了解到,如果今天是“双11”(11月11日)则这件衣服打7折,“双12” (12月12日)则这件衣服打8折,如果有优惠券可以额外减50元(优惠券只能在双11或双12使用),求KiKi最终所花的钱数。
数据范围:衣服价格满足 1 \le val \le 100000 \1≤val≤100000
输入描述:
一行,四个数字,第一个数表示小明看中的衣服价格,第二和第三个整数分别表示当天的月份、当天的日期、第四个整数表示是否有优惠券(有优惠券用1表示,无优惠券用0表示)。 注:输入日期保证只有“双11”和“双12”。
输出描述:
一行,小明实际花的钱数(保留两位小数)。(提示:不要指望商家倒找你钱)
示例1
输入:
1000.0 11 11 1输出:
650.00复制
示例2
输入:
999.8 12 12 0输出:
799.84复制
示例3
输入:
66.6 11 11 1输出:
0.00
我们对代码进行一遍一遍的优化:
#include
//描述
//KiKi非常喜欢网购,在一家店铺他看中了一件衣服,他了解到,如果今天是“双11”(11月11日)则这件衣服打7折,“双12” (12月12日)则这件衣服打8折,如果有优惠券可以额外减50元
//(优惠券只能在双11或双12使用),求KiKi最终所花的钱数。
//
//数据范围:衣服价格满足 1 \le val \le 100000 \1≤val≤100000
//输入描述:一行,四个数字,第一个数表示小明看中的衣服价格,第二和第三个整数分别表示当天的月份、当天的日期、第四个整数表示是否有优惠券(有优惠券用1表示,无优惠券用0表示)。
//注:输入日期保证只有“双11”和“双12”。
//
//输出描述:一行,小明实际花的钱数(保留两位小数)。(提示:不要指望商家倒找你钱)
//
//示例1
//输入:1000.0 11 11 1
//输出:650.00
//示例2
//输入:999.8 12 12 0
//输出:799.84
//示例3
//输入:66.6 11 11 1
//输出:0.00
// - 第一种解法(代码冗余性很大)
int main()
{
double price = 0.0;// -价格
int month = 0; // -月份
int day = 0; // -日期
int flag = 0; // -判断有没有优惠券(1=有 0=没有)
double discount = 1.0;// -折扣
double lastPrice = 0.0;
// - 输入
scanf("%lf %d %d %d", &price, &month, &day, &flag);
// - 进入判断
if (month == 11 && day == 11) // -如果是爽11的话
{
discount = 0.7;
if (flag == 1) // -判断有没有优惠券
{
lastPrice = price * discount - 50.0;
}
else
{
lastPrice = price * discount;
}
}
else if (month == 12 && day == 12)// =如果是双12的话
{
discount = 0.8;
if (flag == 1) // -判断有没有优惠券
{
lastPrice = price * discount - 50.0;
}
else
{
lastPrice = price * discount;
}
}
if (lastPrice < 0.0) // -判断结果会不会小于0.0 , 如果小于 那么价格就是0
{
printf("%.2lf\n",0.0);
}
else
{
printf("%.2lf\n",lastPrice);
}
return 0;
}
// - 第二种解法(减少冗余代码)
int main()
{
double price = 0.0;// -价格
int month = 0; // -月份
int day = 0; // -日期
int flag = 0; // -判断有没有优惠券(1=有 0=没有)
double discount = 1.0;// -折扣
double lastPrice = 0.0;
// - 输入
scanf("%lf %d %d %d", &price, &month, &day, &flag);
// - 进入判断
if (month == 11 && day == 11) // -如果是爽11的话
{
lastPrice = price * 0.7;
if (flag == 1)
{
lastPrice -= 50;
}
}
else if (month == 12 && day == 12)// =如果是双12的话
{
lastPrice = price * 0.8;
if (flag == 1)
{
lastPrice -= 50;
}
}
if (lastPrice < 0.0) // -判断结果会不会小于0.0 , 如果小于 那么价格就是0
{
printf("%.2lf\n", 0.0);
}
else
{
printf("%.2lf\n", lastPrice);
}
return 0;
}
// - 第三种解法(减少冗余代码)
int main()
{
double price = 0.0;// -价格
int month = 0; // -月份
int day = 0; // -日期
int flag = 0; // -判断有没有优惠券(1=有 0=没有)
double discount = 1.0;// -折扣
double lastPrice = 0.0;
// - 输入
scanf("%lf %d %d %d", &price, &month, &day, &flag);
// - 进入判断
if (month == 11 && day == 11) // -如果是爽11的话
{
discount = 0.7;
}
else if (month == 12 && day == 12)// =如果是双12的话
{
discount = 0.8;
}
lastPrice = price * discount - flag * 50; // - 如有flag=1 1*50 = 50 如果flag=0 0*50 = 0
if (lastPrice < 0.0) // -判断结果会不会小于0.0 , 如果小于 那么价格就是0
{
printf("%.2lf\n",0.0);
}
else
{
printf("%.2lf\n",lastPrice);
}
return 0;
}
代码展示:
测试结果:
牛客测试: