我是靠谱客的博主 缓慢酒窝,这篇文章主要介绍【C语言学习笔记】算法篇——枚举算法,现在分享给大家,希望可以做个参考。

#学习资料:《啊哈!算法》、《算法图解》


枚举算法

基本思想:有序地去尝试每一种可能。
对于人类而言,这种算法似乎是十分枯燥、无聊、没有一点计数含量的算法。
但对于计算机而言,在解决某些特定的问题时,枚举算法不失为一种高效简洁的优秀算法。


应用实例

均取自于啊哈!算法

@代码一:奥数题
#include <stdio.h>

int main()
{
	int a[10], i, total=0, book[10], sum;
	for ( a[1]=1; a[1]<=9; a[1]++ )
	for ( a[2]=1; a[2]<=9; a[2]++ )
	for ( a[3]=1; a[3]<=9; a[3]++ )
	for ( a[4]=1; a[4]<=9; a[4]++ )
	for ( a[5]=1; a[5]<=9; a[5]++ )
	for ( a[6]=1; a[6]<=9; a[6]++ )
	for ( a[7]=1; a[7]<=9; a[7]++ )
	for ( a[8]=1; a[8]<=9; a[8]++ )
	for ( a[9]=1; a[9]<=9; a[9]++ )
	{
		for ( i=1; i<=9; i++ )
			book[i] = 0;
		for ( i=1; i<=9; i++ )
			book[a[i]] = 1;
			sum = 0;
			for ( i=1; i<=9; i++ )
				sum += book[i];
				
			if ( sum==9 && a[1]*100 + a[2]*10 + a[3] +
						   a[4]*100 + a[5]*10 + a[6] ==
						   a[7]*100 + a[8]*10 + a[9])
			{
				total++;
				printf ( "%d%d%d + %d%d%dn", a[1], a[2], a[3],
											  a[4], a[5], a[6],
											  a[7], a[8], a[9] );
			}							
	}								
	
	printf ( "total = %d", total/2 );
	return 0;							 
}

学习要点:
1.多重for循环
2.引用book数组标记出现过的数字检查互不相等

@代码二:火柴式等式
#include <stdio.h>

int fun ( int x )
{
	int num = 0;
	int f[10] = { 6, 2, 5, 5, 4, 5, 6, 3, 7, 6 };
	while ( x/10 != 0 )
	{
		num += f[x%10];
		x /= 10;
	}
	num += f[x];
	return num;
}

int main()
{
	int a, b, c, m, i, sum=0;
	scanf ( "%d", &m );
	
	for ( a=0; a<=1111; a++ )
	{
		for ( b=0; b<=1111; b++ )
		{
			c = a+b;
			if ( fun(a) + fun(b) + fun(c) == m-4 )
			{
				printf ( "%d+%d=%dn", a, b, c );
				sum++;
			}
		}
	}
	
	printf ( "一共可以拼出%d个不同的等式", sum );
	return 0;
}

学习要点:
1.巧用c=a+b减少变量使得整个算法的时间复杂度大大降低
2./与%运算符的巧用


最后

以上就是缓慢酒窝最近收集整理的关于【C语言学习笔记】算法篇——枚举算法的全部内容,更多相关【C语言学习笔记】算法篇——枚举算法内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部