纵有疾风起
人生不言弃

智力题(1的次数,金子分块)

1出现的次数

输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字有1,10,11和12,1一共出现了5次。原文

解题思路
个位

考虑将n的十进制的每一位单独拿出讨论,每一位的值记为weight。

以534为例,在从1增长到n的过程中,534的个位从0-9变化了53次,记为round。每一轮变化中,1在个位出现一次,所以一共出现了53次。

再来看weight的值。weight为4,大于0,说明第54轮变化是从0-4,1又出现了1次。我们记1出现的次数为count,所以:

count = round+1 = 53  + 1 = 54

如果此时weight为0(n=530),说明第54轮到0就停止了,那么:

count = round = 53
十位

从1到n,每增加10,十位的weight才会增加1,所以,一轮0-9周期内,1会出现10次。即rount*10。

再来看weight的值。当此时weight为3,大于1,说明第6轮出现了10次1,则:

count = round*10+10 = 5*10+10 = 60 

如果此时weight的值等于0(n=504),说明第6轮到0就停止了,所以:

count = round*10+10 = 5*10 = 50
类推
534 = (个位1出现次数)+(十位1出现次数)+(百位1出现次数)=(53*1+1)+(5*10+10)+(0*100+100)= 214

金子分块

一块金子做为给雇员的工资,工作七天,每天都需要付工资,不能拖欠,也不能提前。至少要把金子分为多少块?每天如何付?原文

分为7份,把它分成3份,第一份占 1 /7,第二份占2/7,第三份占4/7。

解析

第一刀切上整条黄金的七分之一,第二刀切上整条黄金的七分之二,剩下的七分之四为一份。

第一天给他你七切好的那七分之一,第二天给他你切好的七分之二,让他返还你第一天付给他的那七分之一,第三天,给他他返还来的那七分之一,第四天,给他剩余地的七分之四,要回之前给他的那两块金条,第五天,将你要回的那七分之一的金条给他,第六天,要回七分之一,给他七分之二的那块,第七天,给他最后一块就完了。

文章转载于:https://www.jianshu.com/p/9ded4d2eb8da

原著是一个有趣的人,若有侵权,请通知删除

未经允许不得转载:起风网 » 智力题(1的次数,金子分块)
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录