6.2分鱼问题两种解法

// 分鱼问题,从E开始递推,使用for循环简化中间计算,优化枚举 
#include <iostream>
using namespace std;

int main()
{
	int num[5];
	for (num[4] = 16; ;num[4] += 20)
	{
		int i = 3;
		for (; i >= 1; --i)
		{
			num[i] = num[i+1] / 4 * 5 + 1;
			if (num[i] % 4 != 0)
				break;
		}
		if (i == 0)		// 已找到答案 
			break;
	}
	num[0] = num[1] / 4 * 5 + 1;
	for (int i = 0; i < 5; ++i)
		cout << num[i] << ' ';
	return 0;
}

  

// 分鱼问题,从E开始递推
#include <iostream>
using namespace std;

int main()
{
    // 定义数组 
	int num[5];
	// 从6开始枚举num[4] 
	for (num[4] = 6; ; num[4] += 5)
	{
		if (num[4] % 4 != 0)
		   continue;
		num[3] = num[4] / 4 * 5 + 1;
		if (num[3] % 4 != 0)
		   continue;
		num[2] = num[3] / 4 * 5 + 1;
		if (num[2] % 4 != 0)
		   continue;
		num[1] = num[2] / 4 * 5 + 1;
		if (num[1] % 4 != 0)
		   continue;
		num[0] = num[1] / 4 * 5 + 1;
		break;
	}
	// 输出答案 
	for (int i = 0; i < 5; ++i)
		cout << num[i] << ' ';
	return 0;
}

  

// 分鱼问题,从A开始递推,使用for循环简化中间计算,优化枚举 
#include <iostream>
using namespace std;

int main()
{
	int num[5];
	for (num[0] = 16; ; num[0] += 5)
	{
		int i = 0;
		for (; i < 4; ++i)
		{
			num[i+1] = num[i] / 5 * 4;		// 整数除法,可以不减1就直接除以5 
			if (num[i+1] % 5 != 1)
				break;
		}
		if (i >= 4)		// 已找到答案
			break; 
	}
	for (int i = 0; i < 5; ++i)
		cout << num[i] << ' ';
	return 0;
}

  

posted @ 2016-11-30 16:45  yunyouhua  阅读(384)  评论(0编辑  收藏  举报