本文共 1539 字,大约阅读时间需要 5 分钟。
原题目:
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; }}
结果图:
转载地址:http://cctrn.baihongyu.com/