甲乙两个人用一个英语单词玩游戏。两个人轮流进行,每个人每次从中删掉任意一个字母,如果剩余的字母序列是严格单调递增的(按字典序a < b < c <....<z),则这个人胜利。两个人都足够聪明(即如果有赢的方案,都不会选输的方案 ),甲先开始,问他能赢么?
输入: 一连串英文小写字母,长度不超过15,保证最开始的状态不是一个严格单增的序列。
输出:1表示甲可以赢,0表示甲不能赢。
例如: 输入 bad, 则甲可以删掉b或者a,剩余的是ad或者bd,他就赢了,输出1。
又如: 输入 aaa, 则甲只能删掉1个a,乙删掉一个a,剩余1个a,乙获胜,输出0。
用C语言写的,思路:字符串总长度为len,最长有序子串(字符并不一定连续)为longest,若len-longest是偶数,则甲输,若len-longest是奇数,甲只需要一直拿无序的字符就必赢。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100
int LongestString(char *s)
{
int len,i,j,longest=0,t;
len = strlen(s);
for(i=0;i<len-1;i++)
{
t = 1;
for(j= i+1;j<len;j++)
{
if(s[i]< s[j])
{
++t;
s[i] = s[j];
}
if(t>longest)
longest = t;
}
}
if((len-longest)%2 ==0)
return 0;
else
return 1;
}
int main()
{
char s[MAX];
gets(s);
printf("%d\n",LongestString(s));
return 0;
}