剑指offer——扑克牌的顺子
思想:
1、先将输入的几个数进行排序,sort函数是#include<algorithm>下的。
2、统计0的个数,以及相邻数的差值,比较0的个数及差值的和。看是否可以用大王填充中间的差值。
1 #include <iostream> 2 #include <algorithm> 3 #include <stdlib.h> 4 #include <string> 5 using namespace std; 6 7 8 bool IsContinuous(int *numbers,int length) 9 { 10 if(numbers==NULL || length<1) 11 return false; 12 13 sort(numbers,numbers+length); 14 15 int NumOfZero = 0; //0的个数 16 int NumOfGap = 0; //空缺的个数 17 int i; 18 for(i=0;i<length-1;i++) 19 { 20 if(numbers[i] == 0) 21 NumOfZero++; 22 else 23 { 24 if(numbers[i] == numbers[i+1]) 25 return false; 26 else 27 NumOfGap += numbers[i+1]-numbers[i]-1; 28 } 29 } 30 return (NumOfGap>NumOfZero)?false:true; 31 } 32 33 int main() 34 { 35 int n; 36 int arr[15]; 37 memset(arr,0,sizeof(arr)); 38 while(scanf("%d",&n)!=EOF && n!=0) 39 { 40 int i; 41 for(i=0;i<n;i++) 42 scanf("%d",arr+i); 43 44 bool can = IsContinuous(arr,n); 45 if(can) 46 printf("So Lucky!\n"); 47 else 48 printf("Oh My God!\n"); 49 } 50 return 0; 51 }