题目描述
今天小明去了一个风景如画的地方散心,但是自己带的饮料喝完了,小明口渴难耐,见不远处有家小商店,于是跑去买饮料。
小明:“我要买饮料!”
店主:“我们这里有三种饮料,矿泉水1.5元一瓶,可乐2元一瓶,橙汁3.5元一瓶。”
小明:“好的,给我一瓶矿泉水。”
说完他掏出一张N元的大钞递给店主。
店主:“我忘了提醒你了,我们这里没有找客人钱的习惯的,多的钱我们都当小费收了的,嘿嘿。”
小明:“......”
小明环顾四周,就这一家商店,况且实在太渴了,就决定在这买了。不过小明想,与其把钱当小费送给他还不如自己多买一点饮料,反正早晚都要喝,但是要尽量少让他赚小费。
现在小明希望你能帮他计算一下,最少他要给店主多少小费。
输入
输入数据的第一行是一个整数T(1<=T<=100),代表测试数据的数量。然后是T行测试数据,每个测试数据只包含一个正整数N(1<=N<=10000),N代表小明手中钞票的面值,以分为单位。
注意:商店里只有题中描述的三种饮料。
输出
对于每组测试数据,请你输出小明最少要浪费多少钱给店主作为小费,以分为单位。
样例输入
2 900 250
样例输出
0 50
代码块:
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
int T=scanner.nextInt();
int num=0;
for(int i=0;i<T;i++){
int N=scanner.nextInt();
if(N<150)
System.out.println(N);
else if(N>=300)
System.out.println(N%50);
else if(N==150||N==200)
System.out.println(0);
else if(150<N&&N<200)
System.out.println(N%150);
else
System.out.println(N-200);
}
}
}
解题思路:首先在0-150分时,直接是小费,直接输出N。
N在150-200阶段时,当N=150或者是N=200时可以直接输出0。当N大于150小于200的时候,给的小费直接是N-150.
N大于300的时候,当N=300和350的时候,给的小费是0,在300和350 之间的时候,给的小费就是N-300,N在350到400的时候,给的小费是N-350。以此类推,大于30 的时候给的小费都不会超过50分。
综合上边的情况,其实代码还可以简化,把150到200 和大于等于300的情况写在一个条件里面。
最后剩下 的就是200到300的情况,可以直接用N-200,这个条件比较简单。
简化之后的代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
int T=scanner.nextInt();
int num=0;
for(int i=0;i<T;i++){
int N=scanner.nextInt();
if(N<150)
System.out.println(N);
else if(N<=200 || N>=300)
System.out.println(N%50);
else
System.out.println(N-200);
}
}
}
代码简化之后,代码更加简洁了。
感想:做很多题之后会发现,我们写一个程序可能有很多种办法,这道题我的第一种想法可能会是,谢一个三重循环,第一个先写条件150,这样子下去,因为大一的时候做过类似的题,用的就是那种方法。课时做这个题之后,我去博客里面找了一下这道题,当时就看见了用着个算法做的。当时还和室友争论了很久都没有明白,第二天找了老师给我们讲。说实话之前没有想过算法的奥妙之处,这次这道题之后,我对算法产生了极大的兴趣。