1. 程式人生 > >7-12 樹種統計(25 分)

7-12 樹種統計(25 分)

lib pop pen 整數 text -s asp pri 正整數

隨著衛星成像技術的應用,自然資源研究機構可以識別每一棵樹的種類。請編寫程序幫助研究人員統計每種樹的數量,計算每種樹占總數的百分比。

輸入格式:

輸入首先給出正整數N(10?5??),隨後N行,每行給出衛星觀測到的一棵樹的種類名稱。種類名稱由不超過30個英文字母和空格組成(大小寫不區分)。

輸出格式:

按字典序遞增輸出各種樹的種類名稱及其所占總數的百分比,其間以空格分隔,保留小數點後4位。

輸入樣例:

29
Red Alder
Ash
Aspen
Basswood
Ash
Beech
Yellow Birch
Ash
Cherry
Cottonwood
Ash
Cypress
Red Elm
Gum
Hackberry
White Oak
Hickory
Pecan
Hard Maple
White Oak
Soft Maple
Red Oak
Red Oak
White Oak
Poplan
Sassafras
Sycamore
Black Walnut
Willow

輸出樣例:

Ash 13.7931%
Aspen 3.4483%
Basswood 3.4483%
Beech 3.4483%
Black Walnut 3.4483%
Cherry 3.4483%
Cottonwood 3.4483%
Cypress 3.4483%
Gum 3.4483%
Hackberry 3.4483%
Hard Maple 3.4483%
Hickory 3.4483%
Pecan 3.4483%
Poplan 3.4483%
Red Alder 3.4483%
Red Elm 3.4483%
Red Oak 6.8966%
Sassafras 3.4483%
Soft Maple 3.4483%
Sycamore 3.4483%
White Oak 10.3448%
Willow 3.4483%
Yellow Birch 3.4483%


代碼:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char s[100000][30];
int cmp(const void * a,const void *b)
{
    char *aa = (void *)a,*bb = (void *)b;
    return strcmp(aa,bb)>0?1:-1;
}
int main()
{
    int n,c = 1;
    scanf("%d",&n);
    strcpy(s[n],
"spz"); getchar(); for(int i = 0;i < n;i ++) { gets(s[i]); } qsort(s,n,sizeof(s[0]),cmp); // printf("%d\n",n); // for(int i = 0;i < n;i ++) // { // puts(s[i]); // } for(int i = 1;i <= n;i ++) { if(strcmp(s[i],s[i - 1]) == 0)c ++; else { printf("%s %.4f%%\n",s[i - 1],c*100.0/n); c = 1; } } }

7-12 樹種統計(25 分)