nyoj905 卡片游戏
生活随笔
收集整理的這篇文章主要介紹了
nyoj905 卡片游戏
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
卡片游戲
時間限制:1000 ms ?|? 內存限制:65535 KB 難度:1 描述首先取最上方的卡片放到桌子上,然后每次取最上方的卡片,放到桌子上已有卡片序列的最右邊或者最左邊。當N張卡片全部都放到桌子上后,桌子上的N張卡片構成了一個數。這個數不能有前導0,也就是說最左邊的卡片上的數字不能是0。游戲的目標是使這個數最小。
現在你的任務是幫小明寫段程序,求出這個最小數。
然后下面有T行, 每行是一個只含有0~9的字符串,表示N張疊在一起的卡片,最左邊的數字表示最上方的卡片。
[Technical Specification]
T<=1000
1 <= N <= 100
講解:剛開始覺得還挺簡答的,但是寫著寫著才發現,陷阱挺多的啊,于是乎就老是出錯,氣憤,后來修改了下,算是AC了;
具體代碼如下: 1 2 #include<stdio.h> 3 #include<string.h> 4 #include<algorithm> 5 using namespace std; 6 void SOLVE(char *a, int len, int k) 7 { 8 char s[303]; 9 int st = 101, ed = 101, i, n; 10 s[101] = a[0]; 11 for(n = 1; n < len; n++) 12 { 13 if(n < k) 14 { 15 if(a[n] <= s[st]) 16 s[--st] = a[n]; 17 else 18 s[++ed] = a[n]; 19 } 20 else 21 { 22 if(n == k) 23 s[--st] = a[n]; 24 else //第一位就是最小的非零數字 25 n--; 26 break; 27 } 28 }//最小的找到以后,就只需要把后面的數直接放到后面就行了 29 for(i = n+1; i < len; i++) 30 s[++ed] = a[i]; 31 for(i = st; i <= ed; i++) 32 printf("%c",s[i]); 33 printf("\n"); 34 } 35 int main() 36 { 37 int t, i, len, j; 38 char str[102],str1[102]; 39 scanf("%d",&t); 40 getchar(); 41 while(t--) 42 { 43 gets(str); 44 len = strlen(str); 45 strcpy(str1,str); 46 sort(str1,str1+len); 47 i = 0; 48 while(str1[i] == '0') 49 i++; 50 int p = i; 51 for(j = 0; j < len; j++) 52 if(str[j] == str1[i]) 53 p = j; //尋找最后一個最小的非零數字所在位置 54 SOLVE(str,len,p); 55 } 56 return 0; 57 }
?
總結
以上是生活随笔為你收集整理的nyoj905 卡片游戏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 理解JQuery中的data()使用方法
- 下一篇: 关于歪枣网的那些事