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;
}
}