渔夫分鱼问题

渔夫分鱼问题

甲、乙、丙三位渔夫出海打鱼,他们随船带了21只箩筐。当晚返航时,他们发现有7筐装满了鱼,还有7筐装了半筐鱼,另外7筐则是空的,由于他们没有秤,只好通过目测认为7个满筐鱼的重量是相等的,7个半筐鱼的重量是相等的。在不将鱼倒出来的前提下,怎样将鱼和筐平分为3份?

由题可知,框每个各7个,鱼每人各3.5个,设a为满框个数,b为半框个数,a = (1/2)b,答案不唯一:

\整框数半框数空框数
313
313
151

由以上个例可知:
1.同行和同列的和为7
2.a + (1/2)b = 3.5
3.整框个数最大不超过3

解题思路如下:
1.设置一个二维的33数组
2.使用穷举法,把所有可能都找出来,但必须满足上面的要求

代码如下:

void mycode_8()
{
	int kuang[3][3];

	for (int i = 1; i <= 3; i++)
	{
		kuang[0][0] = i;	//甲满框的个数
		for (int j = 1; j <= 3; j++)
		{
			kuang[1][0] = j;	//乙满框的个数
			for (int k = 1; k <= 3 && k <= 7 - (i + j); k++)	//列总和不超过7
			{
				kuang[2][0] = k;	//丙满框的个数

				for (int o = 0; o <= 7; o++)
				{
					kuang[0][1] = o;	//甲半框的个数

					for (int p = 0; p <= 7 - o; p++)
					{
						kuang[1][1] = p;	//乙半框的个数

						for (int l = 0; l <= 7 - (p + o); l++)
						{
							kuang[2][1] = l;	//丙半框的个数

							if (kuang[0][0] + kuang[1][0] + kuang[2][0] == 7 && kuang[0][1] + kuang[1][1] + kuang[2][1] == 7)
							{
								if (double(kuang[0][0]) + double(kuang[0][1]) / 2 == 3.5&&double(kuang[1][0]) + double(kuang[1][1]) / 2 == 3.5&&double(kuang[2][0]) + double(kuang[2][1]) / 2 == 3.5)
								{
									kuang[0][2] = 7 - kuang[0][0] - kuang[0][1];
									kuang[1][2] = 7 - kuang[1][0] - kuang[1][1];
									kuang[2][2] = 7 - kuang[2][0] - kuang[2][1];

									//打印符合项
									for (int n = 0; n < 3; n++)
									{
										for (int m = 0; m < 3; m++)
											printf("%2d ", kuang[n][m]);
										putchar('\n');
									}
									putchar('\n');
									putchar('\n');
								}
							}
						}
					}
				}
			}
		}
	}
}

得到答案:
在这里插入图片描述

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值