三个for循环直接暴力解决,这事最容易想的方法了。
追问还有排序啊
能发过来吗?救救孩子
追答#include<stdio.h>
int main()
{
int n,m;
while(scanf("%d %d",&n,&m)!=EOF){
int a[2000][4];
int t=1,sum=0;
for(int i=0;i<=n;i++)
{
for(int j=0;j<=n;j++)
{
for(int k=0;k<=n;k++)
{
if(i*20+j*12+k*8==m&&i+j+k==n)
{
sum++;
a[t][1]=i;
a[t][2]=j;
a[t][3]=k;
t++;
}
}
}
}
if(sum==0)
printf("No Solution!\n");
else
{
for(int i=1;i<=t;i++)
{
for(int j=i+1;j<=t;j++)
{
if(a[i][1]<a[j][1])
{
int o,p,l;
o=a[j][1];p=a[j][2];l=a[j][3];
a[j][1]=a[i][1];a[j][2]=a[i][2];a[j][3]=a[i][3];
a[i][1]=o;a[i][2]=p;a[i][3]=l;
}
}
}
for(int i=1;i<=t;i++)
{
for(int j=i+1;j<=t;j++)
{
if(a[i][1]==a[j][1])
{
if(a[i][2]<a[j][2])
{
int o1,p1,l1;
o1=a[j][1];p1=a[j][2];l1=a[j][3];
a[j][1]=a[i][1];a[j][2]=a[i][2];a[j][3]=a[i][3];
a[i][1]=o1;a[i][2]=p1;a[i][3]=l1;
}
}
}
}
for(int i=1;i<=sum;i++)
{
printf("%d %d %d\n",a[i][1],a[i][2],a[i][3]);
}
}
}
return 0;
}
用数组存起来再进行排序