首页 > 编程知识 正文

枚举算法和解析算法,C语言定义枚举

时间:2023-05-05 20:40:05 阅读:195879 作者:585

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


枚举算法

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


应用实例

均取自于啊哈!算法

@代码一:奥数题#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./与%运算符的巧用


版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。