小明早晨去买包子,发现商铺里面有三种包子,分别是牛肉包子3块一个,猪肉包子2块一个,白菜包子1块一个。小明今天带了n块钱,要求每种包子都要买至少一个并且钱要用完,试问有几种购买方法?
输入格式:输入一个正整数n表示小明带的钱
输入样例:
10
输出样例:
4
以下四种方式:
1.牛肉包子1个,猪肉包子1个,白菜包子5个
2.牛肉包子1个,猪肉包子2个,白菜包子3个
3.牛肉包子1个,猪肉包子3个,白菜包子1个
4.牛肉包子2个,猪肉包子1个,白菜包子2个
#include<stdio.h>
int main()
{
int n,i,j;//i表示牛肉包子数量,j表示猪肉包子数量
int a,b;//a表示买完牛肉包子后剩下的钱,b表示白菜包子数量
int count=0;//计数
scanf("%d",&n);
for(i=1;i<=n/3;i++)
{
a=n-i*3;
for(j=1;j<=a/2;j++)
{
b=n-i*3-j*2;
if(b!=0)
{
count++;
}
}
}
printf("%d",count);
return 0;
}
思路:
- 首先,定义变量n表示给定的钱数,i表示买牛肉包子的数量,j表示买猪肉包子的数量。
- 初始化变量count为0,用于计数可行的组合数量。
- 通过循环i从1到n/3(每个牛肉包子的价钱为3元,所以最多可以买n/3个牛肉包子),计算剩下的钱a。
- 在嵌套循环中,通过循环j从1到a/2(每个猪肉包子的价钱为2元,所以最多可以买a/2个猪肉包子),计算剩下的钱b。
- 如果b不等于0,则表示b即为白菜包子的数量,因此这种方法可行,count加一。
- 最后,输出count的值,即可行的组合数量。