- 0
- 0
- 约2.12千字
- 约 4页
- 2018-02-24 发布于河南
- 举报
带物旅游问题的解答
某人出游,带有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) ret
原创力文档

文档评论(0)