C语言编写实际问题看法

来源:互联网 发布:u盘格式化数据恢复软件 编辑:程序博客网 时间:2024/05/18 20:08

                                  试探推算具体的数值 

    甲乙丙三渔夫出海打渔,他们随传带21只箩筐,当晚返回是,他们发现七筐装满了鱼,还有七筐装了半筐鱼,另外七筐是空的,由于他们没有称,通过目测,七个半框是相等的,七满眶重量是相等的,若不将鱼带出来的前题下,怎样将于和筐评分为三份?    

每个人应分到7个箩筐,每人各3.5筐鱼。采用3*3数组来表示三个人分到的东西。

数组的每行每列元素之和都是7;

数组行: 满筐 + 半筐 = 3.5筐;

每个人所得满筐数不会超过3筐;

每个人至少有1个半筐;   (来自网络)   

#include <stdio.h>
int main()
{
    int a[3][3],count;
    int i,j,k,m,n,flag;
    printf("It exists possible distribution plans:\n");
    for(i=i;i<=3;i++)//试探第一人满筐a[0][0]的值。
    {
        a[0][0]=i;
        for(j=i;j<=7-i&&j<=3;j++)
        {
            a[1][0]=j;//试探第二人满筐的a[1][0]的值
            if((a[2][0]=7-j-a[0][0])>3) continue;
            if(a[2][0]<a[1][0]) break;//计算第三人满筐的值
            for(k=1;k<=5;k+=2)
            {
                a[0][1]=k;//试探第一人半框的值
                for(m=1;m<7-k;m+=2)
                {
                    a[1][1]=m;//试探第二人半框的值
                    a[2][1]=7-k-m;
                    for(flag=1,n=0;flag&&n<3; n++)


                        if(a[n][0]+a[n][1]<7&&a[n][0]*2+a[n][1]==7)
                            a[n][2]=7-a[n][0]-a[n][1];
                        else flag=0;
                    if(flag)
                    {
                        printf("No.%d       Full basket Semi-basket Empty\n",++count);
                        for(n=0;n<3;n++)
                            printf("     fisher%c:     %d    %d    %d\n",'A'+n,a[n][0],a[n][1],a[n][2]);
                    }


                }
            }
        }
    }
    return 0;
}

[root@localhost 17]# ls
allotfish  allotfish.c
[root@localhost 17]# ./allotfish
It exists possible distribution plans:
No.12808737       Full basket Semi-basket Empty
     fisherA:     1    5    1
     fisherB:     3    1    3
     fisherC:     3    1    3
No.12808738       Full basket Semi-basket Empty
     fisherA:     2    3    2
     fisherB:     2    3    2
     fisherC:     3    1    3

0 0
原创粉丝点击