带物旅游问题的解答.docVIP

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
带物旅游问题的解答

某人出游,带有n(0n100000)件物品,要求如下: 最多带一个汉堡 巧克力的块数是5的倍数 最多带4瓶矿泉水 薯片的包数是偶数 最多带三罐牛奶 糖果的个数是4的倍数。 问他总共有多少种带法? Sample Input 1 Sample Output 3 解题分析: 假设带的汉堡、矿泉水、牛奶的总件数为a件,带的巧克力、薯片、糖果的总件数是b件,则a+b=n。有条件可知a是有范围的,a可为0到8中取值,b的范围则随n变化。 a是一个小范围变化的数,如下所示: for(i=0;i2;i++) for(j=0;j5;j++) for(k=0;k4;k++) a[i+j+k]++; 可以用一个数组a[ ]来存储a在0到8中取值的所有情况。数组a[ ]的下标为a的值。 b是的组成则是一个拆数的问题,b=5x+4y+2z,x,y,z分别表示巧克力的块数,糖果的个数,薯片的包数。可知,如果b是偶数,则x必须是偶数,也就是说5是成双成对的出现。如果,b是奇数,则x必须为奇数,也就是说x+1是偶数,这样就可以确定x的值。剩下的部分由y,z组成,y少一件,z则加两件,也就是说x确定后,y的最大值加1就是y和z的所有的情况,如下所示: int spt(int N) { int count=0;//计数,count表示b=N时,x,y,z的所有组合情况 if(N==0) return 1; if(N0) { if(N%2==0) {//b是偶数 while(N0) { count+=N/4+1; N=N-10; } } else {//b是奇数 N-=5; while(N0) { count+=N/4+1; N=N-10; } } if(N==0) count++;//b是五的倍数 } return count; } for(i=0;i9 i=N;i++) b[i]=spt(N-i); 用一个b[ ]数组储存b件物品的所有情况,b[ ]的下标表示a的值。 总的情况则如下所示: for(i=0;i9 i=N;i++) sum+=a[i]*b[i]; sum表示总的情况。 完整程序如下: //funtion.h 头文件 #includeiostream using namespace std; /*************************************************/ // int spt(int N)// { int count=0; if(N==0)return 1; if(N0) { if(N%2==0) { while(N0) { count+=N/4+1; N=N-10; } } else { N-=5; while(N0) { count+=N/4+1; N=N-10; } } if(N==0) count++; } return count; } /*************************************************/ // int all(int N)// { if(N=0) { int a[9],b[9]; int sum=0; int i,j,k; for(i=0;i9;i++) { a[i]=0; b[i]=0; } for(i=0;i2;i++) for(j=0;j5;j++) for(k=0;k4;k++) a[i+j+k]++; for(i=0;i9 i=N;i++) b[i]=spt(N-i); for(i=0;i9 i=N;i++) sum+=a[i]*b[i]; return sum; } return 0; } //answer.cpp .cpp文件 #includefuntion.h using namespace std; void main() { int x,y; char ch; cout请输入件数(0-100000):endl; cinx; while(x!=-1) { y=all(x); coutyendl; cout是否继续?y/nendl; cinch; if(ch==N||ch==n) x=-1; else {

文档评论(0)

asd522513656 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档