分鱼问题2

(编程小白,自学备考,如有错误,还请批评指正)
分鱼问题二
甲、乙、丙三位渔夫出海打鱼,他们随船带了21只箩筐。当晚返航时,他们发现有7筐装满了鱼,还有7筐装了半筐鱼,另外7筐则是空的,由于他们没有秤,只好通过目测认为7个满筐鱼的重量是相等的,7个半筐鱼的重量是相等的。在不将鱼倒出来的前提下,怎样将鱼和筐平分为3份?
思路:
将满筐记为2,半筐记为1,空筐记为0,总计为21,平均每人分得7。
每人满筐数为 1~3,半筐数为 1~6,空筐为7-满筐-半筐。
用三个一维数组a[3] b[3] c[3](也可以用一个二维数组)表示每人的各种筐的数量。

一仅考虑分法
#include<stdio.h>
int main()
{
int i, j, a[3], b[3], c[3];
for (i = 1; i<4; i++)//循环得到a的满筐数
{
a[0] = i;
a[1] = (7 - 2*i) ;//利用a的满筐数以及a总共应该分得3.5求得a的半筐数
a[2] = 7 - a[0] - a[1];//空筐数为7-半筐-满筐
if (a[1] > 0 && a[2] > 0)
{
for (j = 1; j<4; j++)//
{
b[0] = j;
b[1] = (7 - 2 * j);
b[2] = 7 - b[0] - b[1];
if (b[1] > 0 && b[2] > 0 && a[2] >= b[2])
{
c[0] = 7 - a[0] - b[0];//c的满筐数通过总满筐数减去ab的满筐数之和得到
c[1] = 7 - a[1] - b[1];
c[2] = 7 - c[0] - c[1];
if (c[0] + c[1] * 0.5 == 3.5&&c[2] > 0 && c[1] > 0 && b[2] >= c[2] )//c至少有一个半筐,要保证ab的半筐数小于等于6才可以正确计算c c[0]>=b[0]是为了过滤掉重复的情况
{
printf(“甲 满筐数 %d 半筐数 %d 空筐数 %d\n”, a[0], a[1], a[2]);
printf(“乙 满筐数 %d 半筐数 %d 空筐数 %d\n”, b[0], b[1], b[2]);
printf(“丙 满筐数 %d 半筐数 %d 空筐数 %d\n”, c[0], c[1], c[2]);
}
printf("\n");
}
}
}
}
return 0;
}
在这里插入图片描述

考虑所有情况
#include<stdio.h>
int main()
{

int i, j, a[3], b[3], c[3];
for (i = 1; i<4; i++)//循环得到a的满筐数
{
a[0] = i;
a[1] = (7 - 2*i) ;//利用a的满筐数以及a总共应该分得3.5求得a的半筐数
a[2] = 7 - a[0] - a[1];//空筐数为7-半筐-满筐
if (a[1] > 0 && a[2] > 0)
{
for (j = 1; j<4; j++)//
{
b[0] = j;
b[1] = (7 - 2 * j);
b[2] = 7 - b[0] - b[1];
if (b[1] > 0 && b[2] > 0)
{
c[0] = 7 - a[0] - b[0];//c的满筐数通过总满筐数减去ab的满筐数之和得到
c[1] = 7 - a[1] - b[1];
c[2] = 7 - c[0] - c[1];
if (c[0] + c[1] * 0.5 == 3.5&&c[2]>0 &&c[1]>0)//c至少有一个半筐,要保证ab的半筐数小于等于6才可以正确计算c c[0]>=b[0]是为了过滤掉重复的情况
{
printf(“甲 满筐数 %d 半筐数 %d 空筐数 %d\n”, a[0], a[1], a[2]);
printf(“乙 满筐数 %d 半筐数 %d 空筐数 %d\n”, b[0], b[1], b[2]);
printf(“丙 满筐数 %d 半筐数 %d 空筐数 %d\n”, c[0], c[1], c[2]);
}
printf("\n");
}
}
}
}
return 0;
}
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值