cpe練習筆記 UVa10252 Common Permutation




題目連結

題目大意
找出共同出現的字母,然後依照字母排序輸出


解題提概念
1. 建立兩個陣列來儲存第一與第二次的字母出現次數(對應字母ascii 97-122)
2. 使用%2來判斷目前在第一次輸入還是第二次輸入
3. 印出陣列97-122
4. 選擇出現次數不為0但是數值較小的那一個來當作該字母的印出次數
5. 清空陣列、計數器+1,結束回合

程式碼

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
 int i,j;
 char input[1024];
 memset(input,0,sizeof(input));
 int ascii[123]={0};
 int ascii2[123]={0};
 int counter = 0;
 int loopSta=0;
 
 while(fgets(input,1024,stdin)!=NULL){
  //
  loopSta=counter%2;
  for(i=0;i<1024;i++){
   if(input[i]>=97 && input[i]<=122){
    if(loopSta==0)
     ascii[input[i]]++;
    else
     ascii2[input[i]]++;
   }
  }
    
  //
  int times=0;
  if(loopSta==1){
   for(i=97;i<=122;i++){
    if(ascii[i]!=0 && ascii2[i]!=0){
     (ascii[i]>=ascii2[i])?(times=ascii2[i]):(times=ascii[i]);
     for(j=0;j<times;j++){
      printf("%c",i);
     }
    }
   }
   printf("n");
   memset(ascii,0,sizeof(ascii));
   memset(ascii2,0,sizeof(ascii2));   
  }
  
  //
  memset(input,0,sizeof(input));
  counter++;
 } 
 return 0;
}

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料