2018年1月12日 星期五

[C_SO16-易] 撲克牌牌組整理─接龍(C++)

[C_SO16-易] 撲克牌牌組整理─接龍

成績: 0 / 倒扣: 0.8
問題描述 :
撲克牌遊戲「接龍」, 遊戲玩法為 7 先 出然後依序排列,因此也叫做「排七」; 請為「接龍」設計單一玩家之手牌整理程式。

輸入說明 :
輸入第一個變數 n 作為張數, n>=2 ,接著輸入每張牌的花色及數字:
花色: 1: 黑桃、 2: 紅心、 3: 方塊、 4: 梅花
數字: 1 到 9 , 10:A 、 J:B 、 Q:C 、 K:D

輸出說明 :
依花色黑桃→紅心→方塊→梅花為主排序,數字為次排序。

範例 :

輸入範例輸出範例
13
2 6 3 A 1 8 2 D 4 8 3 3 4 C 1 1 4 5 1 C 2 9 3 8 3 5
1 1 1 8 1 C 2 6 2 9 2 D 3 3 3 5 3 8 3 A 4 5 4 8 4 C

  1. #include <iostream>  
  2. #include <string>  
  3. #include <sstream>  
  4. #include <stdio.h>  
  5. using namespace std;  
  6.   
  7. int main() {  
  8.     // [C_SO16-易] 撲克牌牌組整理─接龍  
  9.     int n;//手排數量  
  10.     string s;  
  11.     getline(cin, s);  
  12.     n = stoi(s);  
  13.     int color[n], num[n];  
  14.     int count = 0;  
  15.     while(getline(cin, s))  
  16.     {  
  17.         stringstream ss(s);  
  18.         string token;  
  19.         //字串切割  
  20.         while (getline(ss, token, ' '))  
  21.         {  
  22.               
  23.             if(token == "A") {token = "10";}  
  24.             else if(token == "B") {token = "11";}  
  25.             else if(token == "C") {token = "12";}  
  26.             else if(token == "D") {token = "13";}  
  27.               
  28.             if(count % 2 == 0)  
  29.             {  
  30.                 color[int(count/2)] = stoi(token);  
  31.             }  
  32.             else if(count % 2 != 0)  
  33.             {  
  34.                 num[int(count/2)] = stoi(token);  
  35.             }  
  36.             count++;  
  37.         }  
  38.         //排序花色  
  39.         for (int i = 0; i < n; i++)  
  40.         {  
  41.             int pos = i;  
  42.             for (int j = i; j < n; j++)  
  43.             {  
  44.                 int a = color[j];  
  45.                 int b = color[pos];  
  46.                 if (a < b)  
  47.                 {  
  48.                     pos = j;  
  49.                 }   
  50.             }  
  51.             swap(color[pos], color[i]);  
  52.             swap(num[pos], num[i]);  
  53.         }   
  54.         //排序數字  
  55.         for (int i = 0; i < n; i++)  
  56.         {  
  57.             int pos = i;  
  58.             for (int j = i; j < n; j++)  
  59.             {  
  60.                 if (color[j] == color[pos])  
  61.                 {  
  62.                     if(num[pos] > num[j])  
  63.                     {  
  64.                         swap(num[pos], num[j]);  
  65.                     }  
  66.                 }   
  67.             }  
  68.         }   
  69.         //輸出  
  70.         for(int i = 0;i < n;i++)  
  71.         {  
  72.             if(i != 0)  
  73.             {  
  74.                 if(num[i] == 10) {cout << " " << color[i] << " " << "A";}  
  75.                 else if(num[i] == 11) {cout << " " << color[i] << " " << "B";}  
  76.                 else if(num[i] == 12) {cout << " " << color[i] << " " << "C";}  
  77.                 else if(num[i] == 13) {cout << " " << color[i] << " " << "D";}  
  78.                 else{cout << " " << color[i] << " " << num[i];}  
  79.             }  
  80.             else  
  81.             {  
  82.                 if(num[i] == 10) {cout << color[i] << " " << "A";}  
  83.                 else if(num[i] == 11) {cout << color[i] << " " << "B";}  
  84.                 else if(num[i] == 12) {cout << color[i] << " " << "C";}  
  85.                 else if(num[i] == 13) {cout << color[i] << " " << "D";}  
  86.                 else{cout << color[i] << " " << num[i];}  
  87.             }  
  88.         }  
  89.         cout << endl;  
  90.     }  
  91.     return 0;  
  92. }  

沒有留言:

張貼留言