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; }
文章標籤
全站熱搜