ケース4-2樹種統計(25ポイント)(マップマッピング)

衛星画像技術を応用することで、天然資源研究機関は各樹木の種類を特定することができます。研究者が各種類の木の数を数え、合計に対する各種類の木の割合を計算するのに役立つプログラムを作成してください。

入力形式:
入力は最初に正の整数N(≤105)を示し、次に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<iostream>
#include<string>
#include<map>
#include<iomanip>
using namespace std;
int main()
{
    
    
	map<string, int>m;
	string st;
	int n;
	cin >> n;
	getchar();		//这里必须加一个getchar()吸收缓冲区里的‘ ’,否则影响getline的功能
	for (int i = 0; i < n; i++)
	{
    
    
		getline(cin, st);
		m[st]++;
	}
	for (auto it = m.begin(); it != m.end(); it++)
	{
    
    
		cout << it->first << " " << fixed << setprecision(4) << 100.0 * it->second / n << "%" << endl;
	}
	return 0;
}

おすすめ

転載: blog.csdn.net/xdg15294969271/article/details/113923370