2017年12月30日 星期六

[C_AR167-易] 三個陣列的共同元素(C++)

[C_AR167-易] 三個陣列的共同元素

Time Limit: 2 seconds
問題描述 :
有三個陣列 x[]、y[] 、z[] ,各有 x 、 y 、 z 個元素,且三個陣列都已由小到大排序過。請撰寫一之程式找出最小共同元素值 ( 也就是同時在三個陣列中出現,且值最小的元素 ) ;若沒有共同元素,請輸出 “ 沒有 ” 。
輸入說明 :
每 4 行為一組測試資料,其中第 1 行為陣列的元素個數,三個陣列的元素個數都一樣,第 2 行為 x[] 、第 3 行為 y[] 、第 4 行為 z[] 。陣列的元素與元素之間以一個逗點「 , 」隔開及一個空白字元隔開,元素的值介於 1~50 之間,元素個數介於 10~30 之間,陣列元素已由小到大排列,且元素值不重複。
輸出說明 :
每 3 行輸入產生一行輸出,輸出為 1 個數字或 “ 沒有 ” 。數字為x[]、y[] 、z[] 中的 最小共同元素值;若沒有共同元素,請輸出 “none” 。
範例 :

輸入範例輸出範例
10
1, 3, 5, 7, 9, 11, 13, 15, 17, 19
2, 4, 9, 10, 12, 14, 16, 18, 20, 21
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
11
12, 17, 18, 25, 27, 31, 33, 36, 44, 47, 48
1, 13, 16, 19, 20, 21, 22, 31, 39, 40, 45
2, 9, 17, 20, 27, 30, 32, 35, 36, 37, 48
9
none

  1. #include <iostream>  
  2. #include <string>    
  3. #include <sstream>    
  4. using namespace std;  
  5.   
  6. int main() {  
  7.     // [C_AR167-易] 三個陣列的共同元素  
  8.     // g++(c++11)    
  9.      //因為n用int不知為啥讀不到,所以用string  
  10.     string Num;  
  11.     while(getline(cin, Num))  
  12.     {  
  13.         int num = stoi(Num);  
  14.         int x[num], y[num], z[num];  
  15.         for(int i = 0;i < 3;i++)  
  16.         {  
  17.             int count = 0;  
  18.             string str_arr;  
  19.             getline(cin, str_arr);  
  20.             //字串切割    
  21.             stringstream ss(str_arr);    
  22.             string token;    
  23.             while (getline(ss, token, ','))    
  24.             {    
  25.                  if(i == 0)//x[]  
  26.                  {  
  27.                     x[count] = stoi(token);  
  28.                     count++;  
  29.                  }  
  30.                  else if(i == 1)//y[]  
  31.                  {  
  32.                     y[count] = stoi(token);  
  33.                     count++;  
  34.                  }  
  35.                  else if(i == 2)//z[]  
  36.                  {  
  37.                     z[count] = stoi(token);  
  38.                     count++;  
  39.                  }  
  40.             }   
  41.         }  
  42.         int min = 51;  
  43.         for(int i = 0;i < num;i++)  
  44.         {  
  45.             for(int j = 0;j < num;j++)  
  46.             {  
  47.                 for(int k = 0;k < num;k++)  
  48.                 {  
  49.                     if(x[i] == y[j] && y[j] == z[k])  
  50.                     {  
  51.                         if(x[i] < min)  
  52.                         {  
  53.                             min = x[i];  
  54.                         }  
  55.                     }  
  56.                 }  
  57.             }  
  58.         }  
  59.           
  60.         if(min == 51)  
  61.         {  
  62.             cout << "none" << endl;  
  63.         }  
  64.         else  
  65.         {  
  66.             cout << min << endl;  
  67.         }  
  68.         min = 51;  
  69.     }  
  70.     return 0;  

沒有留言:

張貼留言