五户共井问题

文章讲述了如何通过递推方法解决五家人共用一口井的问题,找到满足条件的井深和各家绳长,如果存在多组解则输出深度最小的一组,若无解则输出notfound。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.问题描述

有A, B, C, D, E五家人共用一口井,已知井深不超过k米。A, B, C, D, E的绳长各不相同,而且厘米表示的绳长一定是整数。
从井口放下绳索正好达到水面时:
(a)需要A家的绳n1条接上B家的绳1条
(b)需要B家的绳n2条接上C家的绳1条
(c)需要C家的绳n3条接上D家的绳1条
(d)需要D家的绳n4条接上E家的绳1条
(e)需要E家的绳n5条接上A家的绳1条
问井深和各家绳长。

输入

输入只有1行。包括空格分开的6个整数。
第一个整数k(1 <= k <= 20),代表井的最大深度(单位:米)。
接下来是5个正整数n1, n2, n3, n4, n5。这五个整数的含义见上面的题目描述。

输出

输出只有1行。
如果找到了可行解,就输出6个整数,用空格分开,分别代表井的深度和A, B, C, D, E的绳长(单位都是厘米)。
如果有多组可行解,输出井的深度最小的那组解。
如果不存在可行解,就输出一行:
not found

2.解法  

遇到递推问题的思路
1.特殊处理无法递推的项(一般都是第1,2项)
2.找规律
3.按规律预处理(看情况,如果项数少就直接预处理)

#include<iostream>
using namespace std;
int main()
{
	int k,i,a,b,c,d,e,n1,n2,n3,n4,n5,mins;//(a)需要A家的绳n1条接上B家的绳1条
											//(b)需要B家的绳n2条接上C家的绳1条
											//(c)需要C家的绳n3条接上D家的绳1条
											//(d)需要D家的绳n4条接上E家的绳1条
											//(e)需要E家的绳n5条接上A家的绳1条
	cin>>k>>n1>>n2>>n3>>n4>>n5;//输入只有1行。包括空格分开的6个整数。
								//第一个整数k(1 <= k <= 20),代表井的最大深度(单位:米)。
								//接下来是5个正整数n1, n2, n3, n4, n5。
	for(i=1;i<=k*100;i++)
	{
		for(a=1;a<=i;a++)
		{
			b=i-a*n1;
			c=i-b*n2;
			d=i-c*n3;
			e=i-d*n4;
			if(e*n5+a==i&&a!=b&&a!=c&&a!=d&&a!=e&&b!=c&&b!=d&&b!=e&&c!=d&&c!=e&&d!=e)
			{
				cout<<i<<" "<<a<<" "<<b<<" "<<c<<" "<<d<<" "<<e;//如果找到了可行解,就输出6个整数,用空格分开,分别代表井的深度和A, B, C, D, E的绳长(单位都是厘米)。
如果有多组可行解,输出井的深度最小的那组解。
				return 0;
			}
		}
	}
	cout<<"not found";//如果不存在可行解,就输出一行:not found
	return 0;
}

样例输入

10 2 3 4 5 6

样例输出

721 265 191 148 129 76
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值