百马百瓦问题
(时间限制:3000MS 内存限制:32768KB)
描述
共有100匹马驮100块瓦,大马驮m块,小马驮n块,两个马驹驮一块。大马、小马、马驹的匹数会有多种方案,请问共有多少种方案?
输入
输入数据有多组,在一行上输入两个正整数m和n(0<m,n<10)。
输出
在一行上输出合理方案的个数,若不存在则输出"no solution"。
难度
入门
输入示例
3 2
输出示例
7
对穷举法的考察,题中有很多坑需要细心才能一次敲对。
法一:
#include <stdio.h>
int main()
{
int m,n,x,y,z=0,count;
while(scanf("%d %d",&m,&n)!=EOF)
{
count=0; //count每次循环都要赋初值,否则每次输入新数count的值会递加
for(x=0;x<=100;x++)//不要忘记等号
{
for(y=0;y<=100;y++)//不要忘记等号
{
z=(100-m*x-n*y)*2;
if(x+y+z==100)
count++;
}
}
if(count==0)
printf("no solution\n");//不要换行否则会出现Presentation Error
else
printf("%d\n",count);
} //while循环的后一个括号在这里放
return 0;
}
法二:(不容易想到)
#include <stdio.h>
int main()
{
int i,j,k,m,n;
while(scanf("%d %d",&m,&n)!=EOF)
{
int t=0;
for(i=100/m;i>=0;i--)
for(j=100/n;j>=0;j--)
for(k=100;k>=0;k-=2)
{
if(((i+j+k)==100)&&((m*i+n*j+k/2 )==100))
t++;
}
if(t==0)
printf("no solution\n");
else
printf("%d\n",t);
}
return 0;
}