ACM/HDU1006 Let the Balloon Rise,讓氣球上升
阿新 • • 發佈:2018-12-11
Contest time again! How excited it is to see balloons floating around. But to tell you a secret, the judges’ favorite time is guessing the most popular problem. When the contest is over, they will count the balloons of each color and find the result.
思路: 用a陣列記錄不同的單詞,b陣列記錄該單詞的出現次數,每輸入一個單詞進行一次判斷,如果a中沒這個單詞,則a中新增這個單詞,如果已經出現過,那麼對應的b[i]加1。 優點:
#include<stdio.h> #include<string.h> int max(int a,int b) //比較兩個數大小,返回大的值 { if(a<b)return b; else return a; } int main() { int n; while(scanf("%d",&n)&&n!=0) //輸入N個數,0結束 { char a[1000][15]={0}; /*陣列a[i]儲存不同的單詞,由於迴圈,進行初始化 注意a[i]並不是輸入,是判斷為不同的單詞才儲存 */ int b[1000]={0},now,i,m,m_i; /*用b[i]陣列記錄第a陣列中第i個單詞出現的次數。由於迴圈,進行初始化。 now是當前不同單詞的數目,表示到現在共有now個不同的單詞 m為用自定義函式max比較後,到目前輸入為止 重複最多單詞的次數,m_i為該單詞在a[i] 與b[i]對應的角標i*/ now=0; //初始化now while(n--) //輸入N個單詞 ,每輸入一個單詞,進行一次全面判斷,如下: { char sc[15]; scanf("%s",sc); //輸入一個單詞 if(now==0) //如果這是第一個單詞,那麼一定不重複, { strcpy(a[now],sc); //a中新增這個單詞 b[now]=1; //b中該單詞出現次數初始化為1 now+=1; //不重複單詞個數加1 m=b[now]; //最大次數為當前該單詞個數; m_i=now; //最大出現次數的角標為當前角標 } for(i=0;i<now;i++) //每輸入一個單詞,讓該單詞與a這個表示不重複單詞陣列進行比較 { if(strcmp(sc,a[i])!=0&&(i+1)==now) //如果該單詞與a陣列中所有單詞都不相同 { strcpy(a[now],sc); //a中新增這個單詞; b[now]=1; //該單詞出現次數初始化為1; now+=1; //單詞總數加1,準備下一次迴圈使用; } else if(strcmp(sc,a[i])==0) //如果輸入單詞在a中已經存在 { b[i]+=1; //該單詞的個數加1 m=max(b[i],m); //比較當前單詞出現次數加完1後,和原先出現最多的相比,哪個次數更多。 if(m==b[i]) m_i=i; //如果該單詞出現更多,那麼角標變為當前角標,否則保持原樣 } } } printf("%s\n",a[m_i]); //輸出角標為m_i的該單詞。 } }
覺得可以優化的地方,歡迎大家留言!