平分七筐鱼 甲、乙、丙三位渔夫出海打鱼,他们随船带了21只箩筐.当晚返航时,他们发现有十甲乙丙三渔夫出海打渔,他们随传带21只箩筐,当晚返回是,他们发现七筐装满了鱼,还有七筐装
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/23 10:38:28
平分七筐鱼 甲、乙、丙三位渔夫出海打鱼,他们随船带了21只箩筐.当晚返航时,他们发现有十甲乙丙三渔夫出海打渔,他们随传带21只箩筐,当晚返回是,他们发现七筐装满了鱼,还有七筐装
平分七筐鱼 甲、乙、丙三位渔夫出海打鱼,他们随船带了21只箩筐.当晚返航时,他们发现有十
甲乙丙三渔夫出海打渔,他们随传带21只箩筐,当晚返回是,他们发现七筐装满了鱼,还有七筐装了半筐鱼,另外七筐是空的,由于他们没有称,通过目测,七个半框是相等的,七满眶重量是相等的,若不将鱼带出来的前题下,怎样将于和筐评分为三份?
怎么样编一个程序?要求的是编出一个程序。
平分七筐鱼 甲、乙、丙三位渔夫出海打鱼,他们随船带了21只箩筐.当晚返航时,他们发现有十甲乙丙三渔夫出海打渔,他们随传带21只箩筐,当晚返回是,他们发现七筐装满了鱼,还有七筐装
第一种分法:
满筐 半筐 空筐
甲 3 1 3
乙 3 1 3
丙 1 5 1
第二种分法:
满筐 半筐 空筐
甲 2 3 2
乙 2 3 2
丙 3 1 3
分析如下:
每个人分到七个筐,其中有3.5筐鱼.
采用一个3*3的数组a来表示三个人分到的东西.
可以推出:
1、数组的每行或没列的元素之和都为7
2、对数组的行来说,半筐数+满筐数=3.5
3、每个人所得的满筐数不能超过3
4、每个人必须至少有1个半筐,且半筐数一定为奇数
七个半筐就是3.5个满筐,根据提示现总共有10.5筐,也就是三人总共分3.5筐,怎么分不用我说了吧,其中两个得两个满筐和一个半筐,剩下的就全是第三个人的了
七框满的,每人各两框,剩下一个满的分成两个半的,这样9框半的,每人三框半的就可以了,
最后结果每人两框满的,三框半的
先说鱼。。。一共10.5筐,三个人分,就是一人3.5筐,也就是说必须每人有一个半筐的。
然后就是分筐,一共有21个筐,每人要分到7个,每人又必须有一个装了半筐鱼的筐。
所以现在是18个筐,其中7个是满的,7个是空的,4个是半筐的。。每人需要分到6个筐。并且6个筐里的鱼加起来正好是3筐。把所有的鱼都看成半筐的,也就是18个半筐,一人是6个装半筐的,随便拿!
也就是说,先拿出3...
全部展开
先说鱼。。。一共10.5筐,三个人分,就是一人3.5筐,也就是说必须每人有一个半筐的。
然后就是分筐,一共有21个筐,每人要分到7个,每人又必须有一个装了半筐鱼的筐。
所以现在是18个筐,其中7个是满的,7个是空的,4个是半筐的。。每人需要分到6个筐。并且6个筐里的鱼加起来正好是3筐。把所有的鱼都看成半筐的,也就是18个半筐,一人是6个装半筐的,随便拿!
也就是说,先拿出3个半筐的一人一个~~
然后把剩下的4个半筐的分成2份,每份的看为1筐。共2筐
把7筐满的和7筐空的,一比一的配成7份,每份看为1筐。共7筐
每人随意分3份
收起
#include
int a[3][3],count;
int main()
{
int i,j,k,m,n,flag;
printf("It exists possible distribtion plans: ");
for(i=0;i<=3;i++) /*试探第一个人满筐a[0][0]的值,满筐数不能>3*/
{
全部展开
#include
int a[3][3],count;
int main()
{
int i,j,k,m,n,flag;
printf("It exists possible distribtion plans: ");
for(i=0;i<=3;i++) /*试探第一个人满筐a[0][0]的值,满筐数不能>3*/
{
a[0][0]=i;
for(j=i;j<=7-i&&j<=3;j++) /*试探第二个人满筐a[1][0]的值,满筐数不能>3*/
{
a[1][0]=j;
if((a[2][0]=7-j-a[0][0])>3)continue; /*第三个人满筐数不能>3*/
if(a[2][0]=前一个人,以排除重复情况*/
for(k=1;k<=5;k+=2) /*试探半筐a[0][1]的值,半筐数为奇数*/
{
a[0][1]=k;
for(m=1;m<7-k;m+=2) /*试探 半筐a[1][1]的值,半筐数为奇数*/
{
a[1][1]=m;
a[2][1]=7-k-m;
for(flag=1,n=0;flag&&n<3;n++)
/*判断每个人分到的鱼是 3.5筐,flag为满足题意的标记变量*/
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; /*不符合题意则置标记为0*/
if(flag)
{
printf("No.%d Full basket Semi--basket Empty ",++count);
for(n=0;n<3;n++)
printf(" fisher %c: %d %d %d ",
"A"+n,a[n][0],a[n][1],a[n][2]);
}
}
}
}
}
}
收起