close

原文

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=949

感謝Lucky 貓大大翻譯

https://zerojudge.tw/ShowProblem?problemid=c044

 

C++

#include <iostream>
#include <string>
using namespace std;

void swap (int *a,int *b,string *c,string *d)//交換的函式 
{
	int temp=*a;
	*a=*b;
	*b=temp;
	string st=*c;
	*c=*d;
	*d=st;
}

int main()
{
	int n;
	cin>>n;//輸入測資數量
	 
	string is1,cs1[26]={""};
	int cn1[26]={0},i,t;
	
	getline(cin,is1);//cin接 getline會有問題 
					 //所以要多打一次 getline
					 
	for(i=0;i<26;i++)//陣列產生英文字 
	{				 //利用ASCII碼來產生 
		cs1[i]='A'+i;
		
	}
	
	while(n--)
	{
		getline(cin,is1);//輸入句子
		
		for (i= 0;i<is1.length();i++)//一個個比對 
		{
			if(is1[i]>='a'&&is1[i]<='z')//先統一轉換成大寫 
			{
				is1[i]=is1[i]-32;
			}
			if(is1[i]>='A'&&is1[i]<='Z')//計算次數 
			{							 
				cn1[is1[i]-65]=cn1[is1[i]-65]+1;//A和0的ASCII碼相差65
			}                                   //所以相減就可以了
		}
	}
	
	for(i=0;i<26;i++)//按照題目要求排列 
	{				 //氣泡排序法又來了 
		for(t=0;t<26-i-1;t++)
		{
			if(cn1[t]<cn1[t+1])//出現次數較少排到後面 
			{
				swap(&cn1[t],&cn1[t+1],&cs1[t],&cs1[t+1]);
			}
			
			//題目還有第二個條件不過我們已經照字母順序排好了
			//所以不用再排序了 
		}
	}
	
	
	for(i=0;i<26;i++)//輸出 
	{
		
		if(cn1[i]==0)//出現次數多的排到前面 
		{			 //所以出現次數為0就代表後面都不用輸出了 
			break;
		}
		
		cout<<cs1[i]<<" ";
		cout<<cn1[i]<<endl;
	}
	return 0;
}
 
arrow
arrow
    文章標籤
    UVa一星題
    全站熱搜
    創作者介紹
    創作者 豪CO 的頭像
    豪CO

    程式道路,必為豐富

    豪CO 發表在 痞客邦 留言(0) 人氣()