淘宝校园笔试题
goengine
N 个鸡蛋放到 M 个篮子中,篮子不能为空,要满足:对任意不大于 N 的数量,能用若干个
篮子中鸡蛋的和表示。
写出函数,对输入整数 N 和 M,输出所有可能的鸡蛋的放法。
比如对于 9 个鸡蛋 5 个篮子
解至少有三组:
1 2 4 1 1
1 2 2 2 2
1 2 3 2 1

/*
64、淘宝校园笔试题
goengine
N 个鸡蛋放到 M 个篮子中,篮子不能为空,要满足:对任意不大于 N 的数量,能用若干个
篮子中鸡蛋的和表示。
写出函数,对输入整数 N 和 M,输出所有可能的鸡蛋的放法。
比如对于 9 个鸡蛋 5 个篮子
解至少有三组:
1 2 4 1 1
1 2 2 2 2
1 2 3 2 1
1、(n,m,min)表示当前状态,按照篮子里蛋的数目从小到大搜索。
搜到了第m个篮子,1..m 个篮子面共放了n个蛋,当前的篮子放了min个蛋。
下一个扩展(n+t,m+1,t),for t=min...n+1。
2、当n+(M-m)*min>N (鸡蛋不够时)或者 2^(M-m)*n+2^(M-m)-1<N (鸡蛋太多)时把这个枝剪掉……
n+(M-m)*min>N (鸡蛋不够时):因为按从小到大搜索 当前min个,后面至少min个,前面m个框总和n个,所以总和至少n+(M-m)*min>N时,鸡蛋不够
2^(M-m)*n+2^(M-m)-1<N (鸡蛋太多): 假如当前所有篮子放的鸡蛋总合为n,则下一个篮子最多可以放n+1(因为假设前面可以表示1--n,若放n+2,无法表示n+1)下下个篮子2n+2(n,n+1可以表示2n+1,无法表示2n+2),在下下个篮子4n+4,8n+8....
如此类推,如果鸡蛋总和比这些个数相加还大,则表示鸡蛋太多了 ;
3、太多时的情况如下:n,n+1,2n+2,4n+4,8n+8....。=n,n+1,2*(n+1),4*(n+1)...
最多情况为:1,2,4,8,16。。。。。(1+2+4+..)=2^n-1 求和,2^(M-m)*(n+1)-1: 表示前面n个,后面最多起始:n+1个,累增和
*/
#include <iostream>
using namespace std;
long pow2[20];
int N,M;
int ans[1000];
void solve( int n,int m,int Min ) //第m个篮子放min个 前m共放了n个
{ if(n==N&&m==M) { for(int i=1;i<=M;i++) cout<<ans[i]<<" "; cout<<endl; return ; } else if(n+(M-m)*Min>N||N>pow2[M-m]*n+pow2[M-m]-1) return ; else{ for(int i=Min;i<=n+1;i++) { ans[m+1]=i; solve(n+i,m+1,i); //前面m+1个篮子共放n+i个 }}
}
int main()
{ pow2[0]=1; for(int i=1;i<20;i++)  //计算2^i次 pow2[i]=pow2[i-1]<<1; cin>>N>>M; if(M>N||pow2[M]-1<N)  cout<<"没有这样的组合"<<endl;solve(0,0,1); return 0;
} 

淘宝校园笔试题鸡蛋与篮子相关推荐

  1. 2012淘宝校园招聘笔试

    川大站笔试:(本人亲手经历) 1个小时的笔试时间,人还是非常多,快没有位置了. 选择题考察的面非常广,我记得住的只有下面几道题: (1)进程死锁 (2)双链表插入节点 (3)插座问题:用树的知识解决 ...

  2. 2012九月十月腾讯,网易游戏,百度最新校园招聘笔试题

    十月下旬腾讯,网易游戏,百度最新校园招聘笔试题集锦(第271-330题) 引言 此文十月百度,阿里巴巴,迅雷搜狗最新面试十一题已经整理了最新的面试题70道,本文依次整理腾讯,网易游戏,百度等各大公司最 ...

  3. 全民IT时代到来了?学计算机很有前途?——淘宝2011校园招聘笔试感想

    悲剧!一上来就说悲剧,原因有二:悲剧之一,打车去笔试,结果题目都没见着:悲剧之二,由悲剧之一产生或想到的--难道全民IT时代到来了?学计算机就那么有前途?亦或很多人在IT行业成为悲剧--本文纯属个人想 ...

  4. 2010年3月再谈前端工程师的笔试题

    最近在收集前端开发工程师的笔试题,正好看到Adam Lu.的这篇博客,感觉挺不错的转载过来! HTML && CSS 1.Doctype? 严格模式与混杂模式-如何触发这两种模式,区分 ...

  5. 2010 前端工程师的笔试题

    最近在收集前端开发工程师的笔试题,正好看到Adam Lu.的这篇博客,感觉挺不错的转载过来! HTML && CSS 1.Doctype? 严格模式与混杂模式-如何触发这两种模式,区分 ...

  6. 淘宝,微软,IBM等公司笔试,面试题目

    ①淘宝笔试题目 题目大意如下:请使用C语言完成strnicmp的编码实现,要求不能调用任何其他函数.strcicmp完成两个ascii字符串的比较,忽略大小写(两个英文字母比时,认为大小写无差别),最 ...

  7. 九月腾讯,创新工场,淘宝等公司最新面试三十题(更新至10.04)

    九月腾讯,创新工场,淘宝等公司最新面试三十题 引言 曾记否,去年的10月份也同此刻一样,是找工作的高峰期,本博客便是最初由整理微软等公司面试题而发展而来的.如今,又即将迈入求职高峰期--10月份,而本 ...

  8. 腾讯,创新工场,淘宝等公司最新面试三十题(第171-200题)

    北京 上海巡回站 | NVIDIA DLI深度学习培训 2018年1月26/1月12日 NVIDIA 深度学习学院 带你快速进入火热的DL领域 阅读全文                        ...

  9. 九月腾讯,创新工场,淘宝等公司最新面试三十题

    九月腾讯,创新工场,淘宝等公司最新面试三十题 引言 曾记否,去年的10月份也同此刻一样,是找工作的高峰期,本博客便是最初由整理微软等公司面试题而发展而来的.如今,又即将迈入求职高峰期--10月份,而本 ...

  10. 淘宝帝国是如何创建的连载03

    第三部分----我在淘宝这八年 2011年12月8日那天,有同事恭喜我,我才知道自己在淘宝已经七周年了.很多人问"七年痒不痒?"老实说,也曾经痒过, 但往往都是一痒而过,然后又投入 ...

最新文章

  1. python学习笔记之运算符
  2. symbian 获取手机型号
  3. 字符编码的前世今生--转
  4. [Qt教程] 第40篇 网络(十)WebKit初识
  5. C++中explicit关键字用法
  6. php框架laravel百科,PHP 的Laravel 框架
  7. Android之仿网易V3.5新特性
  8. 美国副教授现身说法:如何改变“只收藏不阅读”的习惯
  9. CloudIDE插件在手,按时下班不愁
  10. 教程视图Android教程(十三)-- Activity间的切换
  11. 原生JS实现粘贴到剪贴板
  12. springboot中使用websocket_在 Spring Boot 项目中使用 activiti
  13. java. base关键字_C#基础知识之base关键字介绍
  14. Python新闻网站项目-3.Gerapy爬虫分布式部署
  15. 别人的底鼓/808为什么比你有力?你可能忘了用这个插件
  16. win10修改dns服务器命令,win10怎么修改DNS服务器?win10修改DNS服务器的方法
  17. 一个简单的log2(x)的快速计算方法
  18. 大数据分析难不难好学吗?
  19. Android N 指纹框架
  20. 【经典收藏】深度技术ghost官方原版XP系统sp3下载地址 ...

热门文章

  1. flutter入坑指南
  2. ES2015 模板字符串与字符串扩展方法
  3. 交换机常用功能配置案例总结
  4. 计算机管理 合并分区,硬盘分区进行合并 硬盘分区后怎么合并
  5. 基于PG与PostGIS搭建实时矢量瓦片服务
  6. mysql日期 select_MySQL_MySql日期查询语句详解,使用DATE_FORMAT方法SELECT * FROM `le - phpStudy...
  7. svc预测概率_Kaggle平台Titanic生存率预测项目(TOP3%)
  8. 删除电脑中删不掉的文件或文件夹
  9. python学习 Day08 字符串和正则表达式
  10. 如何获取excel 中的 某几个列的值