データ構造とアルゴリズムタイトルセット(中国)7-24種の統計(25ポイント)

1.トピック

アプリケーションでは、衛星画像の研究機関の天然資源は、各ツリーの種類を識別することができます。書き込みプログラムは、ヘルプの研究者が占有あたりの木の合計数の割合を算出し、木の各の数をカウントしてください。

入力フォーマット:

まず、入力は、N行に続く正の整数N(≤105)は、各列は、ツリーの衛星観測のタイプの名前を与えます。カテゴリ名ではない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%

2.トピック分析

1.マップを使用して

 2. GETCHAR(); //輸送に(GETCHAR食べる、入力タイプの他のタイプがあり、入力文字列の前に)

3. CINは、スペース、タブと他のキーの出会いこれらのキーを入力するように受け入れていない、文字列が終了します 

4. 利用可能な文字[]ます()、文字列型のみ(CIN、単数または複数)のgetlineでき

5.予約小数点以下4桁:

printf("%.4f%%", temp);

 若しくは

#include<iomanip>

cout << fixed << setprecision(4) << temp <<"%"<< endl;

6.拡張:メソッドを丸め:

四舍五入:保留整数 int a = b+0.5;

       保留一位小数  int a=(b+0.05)*10;

            double c=a/10;

       保留二位小数  int a=(b+0.005)*100;

            double c=a/100;

(上面的方法仅适用于正数。)

如果需要对负数进行转换,可以为这个负数加上一个足够大的正整数,使得和变成正数,然后四色五入后再减去前面加上的正整数就好

如: 对 -3.4进行四舍五入

    double a = -3.4+5 = 1.6

    int b = (1.6+0.5) = 2

    int answer = 2 -5 = -3

这儿有个坑, 如 -3.5, 四舍五入应该是-3 而不是-4

强制保留两位小数:include<iomanip>

          cout<<setiosflags(ios::fixed)<<setprecision(2)<<a<<endl; 

3.コード

#include<iostream>
#include<map>
#include<string>
#include<iomanip>
#include<cstdio>
using namespace std;
int main()
{
	int amount = 0;
	cin >> amount;
	map<string,int>list;
	getchar();////当有string类型的输入前面有其他类型输入时,用getchar()吃回车
	for (int i = 0; i < amount; i++)
	{
		string temp;
		getline(cin, temp);//cin不接受空格,TAB等键的输入,遇到这些键,字符串会终止
                      //char[]可用gets(),string类型的只能用getline(cin,s)
		list[temp]++;
	}

	map<string,int>::iterator run;
	double n = amount + 0.0;
	for (run = list.begin(); run != list.end(); run++)
	{
		double temp;
		temp = (*run).second / n;
		temp = temp * 100;
		cout << (*run).first << " ";
		//cout << fixed << setprecision(4) << temp <<"%"<< endl;
        printf("%.4f%%\n", temp);
	}



}

 

公開された37元の記事 ウォンの賞賛1 ビュー264

おすすめ

転載: blog.csdn.net/qq_42325947/article/details/104226534