C++实验4-穷举法解决组合问题

一、问题及代码

//提示:如想验证只需复制后单独将问题前的注释符号去除即可在编译器中运行

/*  
* 文件名称: solution.cpp 
* 作    者:  万绍良 
* 完成日期: 2016  年 4 月 21 日  
* 版 本 号:v1.0  
* 对任务及求解方法的描述部分:设法解决组合问题; 
* 输入描述:无; 
* 问题描述:学会使用循环语句; 
* 程序输出:组合问题的答案结果; 
* 问题分析:需要考虑各个数的范围; 
* 算法设计:使用穷举法。 
*/  
#include<iostream>
using namespace std;
int main()
/*
{	//(1)百钱买百鸡问题
	//鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买白鸡。
	int x,y,z;
	cout<<"公鸡数\t母鸡数\t小鸡数"<<endl;
	for(x=0;x<=20;x++)
		for(y=1;y<=33;y++)
		{
			z=(100-5*x-3*y)*3;
			if(x+y+z==100)
				cout<<x<<"\t"<<y<<"\t"<<z<<endl;
		}
		return 0;
}
*/
/*
{	//(2)年龄几何
	//张三、李四、王五、刘六他们四人的年龄相加是26,相乘是880,
	int i,j,k;
	cout<<"该等差数列为:";
	for(i=1;i<=4;i++)
		for(j=1;j<=6;j++)
		{
			if(4*i+6*j==26 && i*(i+j)*(i+2*j)*(i+3*j)==880)
				for(k=0;k<=19;k++)
					cout<<i+k*j<<",";
		}
		cout<<endl;
		return 0;
}
*/
/*
{	//(3)三色球问题
	int	a,b,c;
	cout<<"红球数\t白球数\t黑球数"<<endl;
	for(a=0;a<=3;a++)
		for(b=0;b<=3;b++)
			for(c=2;c<=6;c++)
				if(a+b+c==8)
					cout<<a<<"\t"<<b<<"\t"<<c<<endl;					
	return 0;
}
*/

{	//(4)都要学C
	int a,b,c,d;
	cout<<"都\t要\t学\tC"<<endl;
	for(a=1;a<=2;a++)
		for(b=0;b<=9;b++)
			for(c=0;c<=9;c++)
				for(d=0;d<=9;d++)
				{
					bool i,e;
					i=(a!=b && a!=c && a!=d && b!=c && b!=d && c!=d);
					e=(a*1000+b*200+c*30+d*4==2008);
					if(i && e)
						cout<<a<<"\t"<<b<<"\t"<<c<<"\t"<<d<<endl;
				}
	return 0;
}

二、运行结果

(1)百钱买百鸡问题

C++实验4-穷举法解决组合问题_第1张图片

(2)年龄几何

C++实验4-穷举法解决组合问题_第2张图片

(3)三色球问题

C++实验4-穷举法解决组合问题_第3张图片

(4)都要学C

C++实验4-穷举法解决组合问题_第4张图片


三、心得体会

穷举法在明确算法与目的之后做起来比较迅速,而且程序内容一般较少且容易理解。

四、知识点总结

使用穷举法可以很方便地解决一些组合问题,注意for语句的嵌套使用。

你可能感兴趣的:(C++实验4-穷举法解决组合问题)