百马百担问题,用while来解决

100匹马驮100担货,大马一匹驮3担,中马一匹驮2担,小马两匹驮一担。
1.当大马、中马、小马每种不能少于一匹,有多少种组合法?
2.当可以缺少一种或缺二种,又有多少种组合法?
3.用while求第一种组合法。
4.用do-while求2组合法。
5.用三重或二重for循环求2种组合法。
6.除打印结果和多少种组合法外,还要分别打印三种算法所费机时多少。

#include<stdio.h>
int main()
{
    int big,mid,small,sum=0;
    for(big=0;big<33;big++)
        for(small=0;small<100;small+=2)
            for(mid=0;mid<50;mid++){
                if(3*big+2*mid+small/2==100&&big+mid+small==100)
                {
                    printf("big:%d\tmid:%d\tsmall:%d\n",big,mid,small);
                    sum++;
                }

            }
    printf("%d\n",sum);
    return 0;
}

img

img


#include <stdio.h>
int main()
{
    int i,j,k;
    for(i=1;i<100;i++){
        for(j=1;j<100;j++){
            for(k=1;k<100;k++){
                if((i*3 + j*2 + k/2 == 100)    && (i+j+k==100) && (k%2==0))
                    printf("大马%d,中马%d,小马%d",i,j,k);
            }    
        }    
    }
    return 0;
}

用FOR

#include <stdio.h>

void main()

{
    int big, mid, small, sum = 0;

    for (big = 0; big < 33; big++)

        for (small = 0; small < 100; small += 2)

            for (mid = 0; mid < 50; mid++)

            {
                if (3 * big + 2 * mid + small / 2 == 100 && big + mid + small == 100)

                {
                    printf("big:%d\tmid:%d\tsmall:%d\n", big, mid, small);

                    sum++;
                }
            }

    printf("%d\n", sum);
}

用while

#include <stdio.h>
void main()
{
    int big, mid, small, sum = 0;
    big = 0;
    while (big < 33)
    {
        small = 0;
        while (small < 100)
        {
            mid = 0;
            while (mid < 50)
            {
                if (3 * big + 2 * mid + small / 2 == 100 && big + mid + small == 100)
                {
                    printf("big:%d\tmid:%d\tsmall:%d\n", big, mid, small);
                    sum++;
                }
                mid++;
            }
            small += 2;
        }
        big++;
    }
    printf("%d\n", sum);
}