1. 程式人生 > >從撲克牌中隨機抽5張排,判斷是不是一個順子,即這5張牌是不是連續的。2~10為數字本身,A為 1,J為11,Q為12,K為13,而大,小王可以看成任意數字。

從撲克牌中隨機抽5張排,判斷是不是一個順子,即這5張牌是不是連續的。2~10為數字本身,A為 1,J為11,Q為12,K為13,而大,小王可以看成任意數字。

  1. #define  _CRT_SECURE_NO_WARNINGS  
  2. #include<stdio.h>  
  3. #include<math.h.>  
  4. #include<assert.h>  
  5. #define n 5  
  6. int main()  
  7. {  
  8.     int arr[n]={0};  
  9.     int count =0;  
  10.     int i=0;  
  11.     int max=0;  
  12.     int flag=1;  
  13.     //從鍵盤隨機輸入五個數表示從撲克牌中隨機抽中的五張牌  
  14.     printf("請輸入五個數(0~13):");  
  15.     for(i=0;i<n;++i)  
  16.     {  
  17.         scanf("%d" ,&arr[i]);  
  18.         assert( (arr[i]<=13)&&(arr[i]>=0));  
  19.     }  
  20.     //判斷是否有兩個相同的數,如果有肯定不是順子直接退出  
  21.     for(i=0;i<n-1;i++)  
  22.     {  
  23.         for(int j=i+1;j<n;j++)  
  24.         {  
  25.             if((arr[i]==arr[j])&&(arr[i]!=0)&&arr[j]!=0)  
  26.             {  
  27.                 printf("不是順子\n");  
  28.                 return 0;  
  29.             }  
  30.         }  
  31.     }  
  32.     //氣泡排序  
  33.     for(int i=0;i<n-1;i++)  
  34.     {  
  35.         for(int j=0;j<n-i-1;j++)  
  36.         {  
  37.             if(arr[j]>arr[j+1])  
  38.             {  
  39.                 int
     tmp=0;  
  40.                 tmp=arr[j];  
  41.                 arr[j]=arr[j+1];  
  42.                 arr[j+1]=tmp;  
  43.             }  
  44.         }  
  45.      }  
  46.     for(int i=0;i<n;i++)  
  47.     {  
  48.         printf("%d  ",arr[i]);  
  49.     }  
  50.     //計算大小王的個數  
  51.     for(i=0;i<n;i++)  
  52.     {  
  53.         if(arr[i]==0)  
  54.         count++;  
  55.     }  
  56.     printf("count=%d\n",count);  
  57.     //判斷是順子  
  58.     if(count==0)  
  59.     {  
  60.         for(i=0;i<n-1;i++)  
  61.         {  
  62.             if(abs(arr[i]-arr[i+1])!=1)  
  63.             {  
  64.                 flag=0;  
  65.                 break;  
  66.             }  
  67.         }  
  68.             if(flag==0)  
  69.             {  
  70.                 printf("false\n");  
  71.             }  
  72.             else  
  73.             {  
  74.                 printf("ture\n");  
  75.             }  
  76.         }  
  77.     if(count==1)  
  78.     {  
  79.         for(i=1;i<n-1;i++)  
  80.         {  
  81.             if(abs(arr[i]-arr[i+1])>1)  
  82.             {  
  83.                 max+=(abs(arr[i]-arr[i+1])-1);//間隔數的個數;  
  84.             }  
  85.         }  
  86.         if(max>1)  
  87.         {  
  88.             printf("false\n");  
  89.         }  
  90.         else  
  91.         {  
  92.             printf("ture\n");  
  93.         }  
  94.     }  
  95.     if(count==2)  
  96.     {  
  97.         for(i=2;i<n-1;i++)  
  98.         {  
  99.             if(abs(arr[i]-arr[i+1])>1)  
  100.                 max+=(abs(arr[i]-arr[i+1])-1);  
  101.         }  
  102.         if(max>2)  
  103.         {  
  104.             printf("false\n");  
  105.         }  
  106.         else  
  107.         {  
  108.             printf("ture\n");  
  109.         }  
  110.     }  
  111.         return 0;  
  112. }