Buying keys

题目来源:牛客新生赛
One day Xiao Ming is not happy because he has no idea about how to run out of his pocket money. At that moment, a mysterious man appears with a smile:“My keys are on sale, three yuan can buy a key, ten yuan can buy three keys.How many keys do you wanna buy?”
Xiaoming is attracted by mysterious man and wants to spend all his money on buying keys. He doesn’t want keep any money at the end. At the same time, because of the heavy weight of keys, Xiaoming Hopes that he can buy as few keys as possible. At the beginning, Xiao Ming had n yuan. Can you tell Xiaoming the minimum number of keys he can bought if he runs out of his pocket money?If Xiaoming can’t run out of his money, please output “orz”.
翻译:小明要去买钥匙,10块钱3把,三块钱一把,因为钥匙很重,所以要尽可能少买钥匙数目。
思路:首先要判断出,这个钱是否能够买完钥匙,不能的话输出“orz”,可以的话,要考虑怎样买数目最少。肯定是能尽可能多买10块钱3把的,因为一把平均下来3块多,肯定最后数目比一把3块的少即可。
1.如何判断说能否买完呢?
答:因为三块钱可以买一把,所以,钱的数目对三取余必定是1或2.那么只要钱的数目大于余数乘以10就可以了,只要余数乘以10能够大于钱的数目,那么就说明余数乘以10的那部分可以去买10块钱3把的,剩下的再用3块钱一把去买,一定能够买完。我们用余数乘以十,相当于从那些钱里面取出9块钱来买钥匙,而9恰好又是3的倍数,所以,无论我们取出多少个9,剩下的钱一定能够被3整除,所以这个是否能够买完的问题就解决了。
2.如何买数目最小?
答:那肯定是买这中10块钱三把的,一把三块多,然后再买三块钱一把的。

import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner reader=new Scanner(System.in);
		while(reader.hasNextInt()) 
		{
		int money=reader.nextInt();
		int remainder=money%3;
		int num=0;
		if(money>=remainder*10)//符合条件就可以买了
		{
			if(money%10==0)//刚刚好能用十买完
				num=money/10*3;
			else
			{
				if(money%10%3==0)//买完10的之后剩下的买三
				{
					num=money/10*3+money%10/3;
				}
				else 
				{
					int i;
					for( i=1;i<=9;++i)
					{
						if((i*10+money%10)%3==0)
						{
							break;
						}
					}
					num=(i*10+money%10)/3+(money-((i*10+money%10)))/10*3;
				}
			}
			System.out.println(num);
		}
		else
			System.out.println("orz");
	}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值