知识点总结报告 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;
}

 

 
 
 
posted @ 2018-02-03 23:24  给我的敌人开黑市  阅读(107)  评论(0编辑  收藏  举报