单词博弈

甲乙两个人用一个英语单词玩游戏。两个人轮流进行,每个人每次从中删掉任意一个字母,如果剩余的字母序列是严格单调递增的(按字典序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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值