UVa 10420 - List of Conquests

Sorting/Searching类的题目.

总体挺简单.

题目要求统计每个国家出现的次数.

一开始我以为国家就是题目开头的五个..边写边纳闷..怎么那么简单...

后来看到输出中有个上面没有的England.....╮(╯▽╰)╭

我的思路是把国家放到一个二维数组word里(话说这招屡试不爽啊..),再开一个数组num,存放国家的数目.

另外开一个数组temp,读取每句话中的国家,并和word里的国家对比.如果有相同的,那个国家对应的num数目+1,否则就增加一个国家.

全部输入好之后用冒泡法排序,排序的同时也对num数组做相应的调换.


没看到要用字典序输出..WA了两次(┬_┬).


#include <stdio.h>
#include <string.h>
int Getcont(char temp[], int &numofcont);
char cont[3000][100];
int num[3000] = {0};
int main()
{
    //reopen("input.txt", "r", stdin);
    memset(cont, 0, sizeof(cont));
    char temp[200];
    int numofcont = 0;
    int n;
    scanf("%d", &n);
    getchar();
    int i, j;
    for (i = 0; i < n; i++)
    {
        memset(temp, 0, sizeof(temp));
        gets(temp);     //获取整个句子
        int key = Getcont(temp, numofcont);        //取得国家的标号,同时统计国家数
        num[key]++;
    }
    //排序
    for (i = 0; i < numofcont; i++)
    {
        for (j = i + 1; j < numofcont; j++)
        {
            if (strcmp(cont[i], cont[j]) > 0)
            {
                char str[100];
                int tempnum;
                strcpy(str, cont[j]);
                tempnum = num[j];
                strcpy(cont[j], cont[i]);
                num[j] = num[i];
                strcpy(cont[i], str);
                num[i] = tempnum;
            }
        }
    }
    for (i = 0; i < numofcont; i++)
        printf("%s %d\n", cont[i], num[i]);
    return 0;
}
int Getcont(char temp[], int &numofcont)
{
    int i;
    char buf[50];
    memset(buf, 0, sizeof(buf));
    //char *c;
    //获取传入句子的国家信息
    for (i = 0; temp[i] != ' '; i++)
        buf[i] = temp[i];
    for (i = 0; i < numofcont; i++)
    {
        if (strcmp(buf, cont[i]) == 0)
        {
            return i;
        }
    }
    if (i == numofcont)     //如果找不到就新建一个国家
    {
        sprintf(cont[numofcont], "%s", buf);
        numofcont++;
        return i;
    }

}



你可能感兴趣的:(ACM,uva,10420)