原题目:
Z国的货币系统包含面值1元、4元、16元、64元共计4种硬币,以及面值1024元的纸币。现在小Y使用1024元的纸币购买了一件价值为N(0<N<=1024)的商品,请问最少他会收到多少硬币?
解析:
(5~10分钟左右的题目。这里给个思路,大家可以根据这个思路来进行微调。)因为题目的找零有局限性,这里不用做循环,直接进行计算即可。用一个sur作为剩余的金额,依次计算到零即可,题目限制金额为1024。所以把它当做一个程序内部定数进行计算就好了。
JAVA代码:
import java.util.Scanner;
public class FindCorn {
public static int one_m = 0;
public static int two_m = 0;
public static int sixteen_m = 0;
public static int sixty_four = 0;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int thing = sc.nextInt();
if(thing>1024){
System.out.println("抱歉,物品钱已经大于1024!");
}
else if(thing<=0){
System.out.println("抱歉,输入不合法!");
}
else{
int n = 1024;//1024
System.out.println("共找回硬币总数: " + findMoney(n,thing) + "枚硬币");
System.out.println("其中64元共: " + sixty_four + "枚硬币");
System.out.println("其中16元共: " + sixteen_m + "枚硬币");
System.out.println("其中2元共: " + two_m + "枚硬币");
System.out.println("其中1元共: " + one_m + "枚硬币");
}
}
public static int findMoney(int m,int t){//m是钱,thing是物品钱
int sur = m - t;//剩余钱
int last = 0;
if(sur == 0){
return 0;
}
else if(sur > 0){
sixty_four = sur/64;
sur = sur-sixty_four*64;//继续剩余
last = last + sixty_four;
if( sur!= 0){//如果不整除 64
sixteen_m = sur/16;
sur = sur - sixteen_m*16;
last = last + sixteen_m ;
if(sur!=0){//如果不整除16
two_m = sur/2;
sur = sur - two_m*2;
last = last + two_m ;
if(sur !=0){
one_m = sur/1;
last = last + one_m ;
}
}
}
return last;
}
return m;
}
}
结果图: