POJ 2418

http://poj.org/problem?id=2418

这是一个二叉树的题目,但我看了下书,还是不是特别理解会用二叉树,所以我就用其他的办法来做,结果一样AC,时间也就1700多ms,比起二叉树的时间多了几百ms

但是就是内存大了很多倍,因为数组开的大,也是一个水题

题意就是给你很多个单词,要你统计单词出现的次数,最后按字典升序输出,题目还是比较简单的

 1 #include <stdio.h>
 2 #include <iostream>
 3 #include <string.h>
 4 #include <stdlib.h>
 5 
 6 
 7 using namespace std;
 8 
 9 
10 int cmp(const void *a,const void *b)
11 {
12     return strcmp((char *)a,(char *)b);
13 }
14 
15 char str_1[1000001][32],str_2[10001][32];      //str_1是用来输入的,str_2是用来存没有重复的每一个单词,以及sustr用来存这个单词有多少个
16 int sustr[10001];
17 
18 int main()
19 {
20     int first=0,num=0,mark=0;
21     char cm[32];  
22     while(gets(str_1[first])!=NULL)    //这个我也是看discuss才知道NULL是输入结束的标志,也就是输入ctrl+z,就会结束
23         first++;
24     qsort(str_1,first,sizeof(str_1[0]),cmp);
25     strcpy(cm,str_1[0]);
26     for(int i=0;i<=first;i++)
27     {
28         if(strcmp(cm,str_1[i]))        //这个strcmp函数,我也没查证,但经过使用时才发现,strcmp(x,y)如果x=y返回的应该是0,如果不等于返回的是1。
29         {
30             strcpy(str_2[num],cm);    //用cm和str_2的数组进行比较,如果相同,则下一个,不同的话,记录下来。
31             sustr[num]=i-mark;
32             num++;
33             strcpy(cm,str_1[i]);
34             mark=i;
35         }
36     }
37     for(int i=0;i<num;i++)
38     {
39         printf("%s %.4f
",str_2[i],(1.0*sustr[i]/first)*100);
40     }
41     return 0;
42 }
原文地址:https://www.cnblogs.com/Tree-dream/p/5365335.html