知识点总结报告 2.3
知识点:枚举
枚举(Enumeration)是C的基础数据结构之一不是构造数据结构,即一一列举之意。在枚举思想就是把有限个可能全部列举出来。
枚举法的本质就是从所有候选答案中去搜索正确的解,使用该算法需要满足两个条件:(1)可预先确定候选答案的数量;(2)候选答案的范围在求解之前必须有一个确定的集合。
枚举法虽然是“暴力求解”,时空效率低,在数据量庞大时更是如此,但是枚举法简单,容易理解,在小范围内应用很收到不错的效果。
习题:Let the Balloon Rise http://acm.hdu.edu.cn/showproblem.php?pid=1004
分析:本题会给出N组测试用例,每组的第一行是m,以下是m行字符串(热气球的颜色),统计哪种颜色出现次数最多并打印该颜色。用枚举来解题。首先我们用二维字符数组存储颜色,定义一个计数用的数组,下标一一对应。然后用双层循环遍历每一行的颜色总共出现了几次,并存入计数数组中。对计数数组进行处理,找到其中最大值的下标,最后用下标输出颜色。
献上代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_SIZE 1000 int FindMaxIndex(int [],int ); int main() { int n; while(scanf("%d",&n)!=EOF) { if(n==0) exit(0); int i,j,index; int num[MAX_SIZE]={0}; char color[MAX_SIZE][16]; for(i=0;i<n;i++) scanf(" %s",color[i]); for(i=0;i<n;i++) for(j=0;j<n;j++) { if(!strcmp(color[i],color[j])) num[i]+=1; } index=FindMaxIndex(num,n); printf("%s\n",color[index]); } return 0; } int FindMaxIndex(int num[],int n) { int MAX=num[0],Index=0; int i; for(i=0;i<n;i++) if(MAX<num[i]) { MAX=num[i]; Index=i; } return Index; }