熊分苹果的问题
2015-09-18 21:37
155 查看
今天参加笔试,遇见一道编程题,给定一个1~9的整数N代表熊的数目,每只熊按照如下方式分苹果:先将苹果平均分为N份,再扔掉一个。要求输出最少的苹果总数?
思路1:逐层向下,设总数为X,则第一次每一份为(X-1)/N个苹果,第二次为((N-1)*((X-1)/N)-1)/N,依次类推.......,发现到最后由于嵌套的层数过多,已经被弄晕了,果断换方法。
思路2:(采取补苹果的方法)由题描述,因为要扔一个苹果,所以扔一个苹果==补N-1个苹果,因此第一个熊得到的苹果数为(X+N-1)/N,第二个熊得到的为(N-1)*(X+N-1)/(N*N),。。。。第N个熊为(N-1)的(N-1)次方*(X+N-1)/N的N次方。
由于熊肯定得到的是整数个苹果,所以第N个熊的苹果数(N-1)的(N-1)次方*(X+N-1)/N的N次方必为一个整数。很显然(N-1)的(N-1)次方/N的N是不可能整除的,因此(X+N-1)必为N的N次方的整数倍,我们主需要去尝试当(X+N-1) = k倍的N的N次方即可,k从1开始走起,遇到第一个满足(X+N-1) = k倍的N的N次方的k时,对应的x即为最少的苹果数。
基于上面思想:有如下代码
思路1:逐层向下,设总数为X,则第一次每一份为(X-1)/N个苹果,第二次为((N-1)*((X-1)/N)-1)/N,依次类推.......,发现到最后由于嵌套的层数过多,已经被弄晕了,果断换方法。
思路2:(采取补苹果的方法)由题描述,因为要扔一个苹果,所以扔一个苹果==补N-1个苹果,因此第一个熊得到的苹果数为(X+N-1)/N,第二个熊得到的为(N-1)*(X+N-1)/(N*N),。。。。第N个熊为(N-1)的(N-1)次方*(X+N-1)/N的N次方。
由于熊肯定得到的是整数个苹果,所以第N个熊的苹果数(N-1)的(N-1)次方*(X+N-1)/N的N次方必为一个整数。很显然(N-1)的(N-1)次方/N的N是不可能整除的,因此(X+N-1)必为N的N次方的整数倍,我们主需要去尝试当(X+N-1) = k倍的N的N次方即可,k从1开始走起,遇到第一个满足(X+N-1) = k倍的N的N次方的k时,对应的x即为最少的苹果数。
基于上面思想:有如下代码
![](http://images2015.cnblogs.com/blog/514938/201509/514938-20150918213602398-1753148347.png)
相关文章推荐
- matlab(2) Logistic Regression: 画出样本数据点plotData
- UI12_AVAudioPlayer
- 红米NOTE拆机视屏 红米NOTE换总成
- 目标文件ELF中的内容
- iOS 核心动画-关键帧动画
- java环境配置
- java环境配置
- dumpsys input
- 常用软件测试技术
- 40 Combination Sum II
- MINE TYPE
- Java
- Network (hdu 3078 在线LCA)
- hdu2159 FATE(二维背包)
- 技术人生:故事之五 ODBC和C/S为何物
- iOS 核心动画 -基础动画
- HDU 4022 Bombing STL 模拟题
- 安装VS2013后与数据库的连接问题
- 送给半路出家的Pythoner
- 继续Set,Map起来