天天看点

C语言穷举法求解:36块砖,男搬4,女搬3,两个小孩抬一块砖,要求一次搬完,问男人、女人和小孩各需多少人?

求解的问题描述:36块砖,男搬4,女搬3,两个小孩抬一块砖,要求一次搬完,问男人、女人和小孩各需多少人?

求解思路:用for循环嵌套3层,定义3个变量:i,j,k,分别代表男,女和小孩。每层循环最大数都是砖的总数即可,最最内层的for循环再用if条件判断语句实现男搬多少砖+女搬多少砖+小孩搬多少砖=砖的总数。

代码如下:

代码方案(一):

#include<stdio.h>

int main()

{

int i,j,k;

for(i=1;i<=36;i++){

    for(j=1;j<=36;j++){

        for(k=1;k<=36;k++){

        if(((4*i+3*j+0.5*k)==36))printf("男的有%d个,女的有%d个,小孩有%d个。\n",i,j,k);

    }

}

}

}

代码运行结果截图:

C语言穷举法求解:36块砖,男搬4,女搬3,两个小孩抬一块砖,要求一次搬完,问男人、女人和小孩各需多少人?

代码方案(二):

#include<stdio.h>

int main()

{

int i,j,k;

for(i=0;i<35;i++){

    for(j=0;j<35;j++){

        for(k=0;k<35;k++){

        if(((4*i+3*j+0.5*k)==36))printf("男的有%d个,女的有%d个,小孩有%d个。\n",i,j,k);

    }

}

}

}

代码运行结果截图:

C语言穷举法求解:36块砖,男搬4,女搬3,两个小孩抬一块砖,要求一次搬完,问男人、女人和小孩各需多少人?

完善代码(主要是统计出总的搬砖方案个数,即加入统计方案个数功能):

#include<stdio.h>

int main()

{

int i,j,k;

int b=0;

for(i=1;i<=36;i++){

    for(j=1;j<=36;j++){

        for(k=1;k<=36;k++){      

        if(((4*i+3*j+0.5*k)==36)){

        printf("男的搬砖的有%d个,女的搬砖的有%d个,小孩子搬砖的有%d个。\n",i,j,k);

        b=b+1;    

    }    

    }  

}

}

          printf("以上搬砖方案共有:%d种\n",b);

}

完善后的代码运行结果截图:

C语言穷举法求解:36块砖,男搬4,女搬3,两个小孩抬一块砖,要求一次搬完,问男人、女人和小孩各需多少人?

继续阅读