`
xiaoheliushuiya
  • 浏览: 401237 次
文章分类
社区版块
存档分类
最新评论

UVa 489 刽子手游戏

 
阅读更多

/*

* 解题思路:

*489的题意有点点绕、理解错了两次、刚开始是拿排序做的,后来发现输入的猜测对错先后顺序会影响输入结果、果断放弃排序思路

*首先题意是:

* 题目给出两个字符串、第一个字符串是被匹配的字符串,第二个相当于是猜测字符串。如果第二个字符串中的字符在第一个字符串中出现,

*则表示猜对(需要注意的是:第二个字符串中字符与第一个字符串中任意一个与之相等的字符都算猜对 );显然,如果没有出现的话表示猜错(需要注意的是:同样的猜*错只算一次 )

* 三种输出情况解释:(在猜测过程中)

* 1、若在猜错7次前第二个字符串将第一个字符串中字符全部猜对,则输出“You win.”;

* 2、若在猜错7次时(第二个字符串还有剩余或刚好完结时候就已经猜错7次),且第一个字符串中还有字符没有猜中,则输出"You lose.";

* 3、若在猜错7次前第二个字符串已匹配完全,并且第一个字符串中还有没有猜中的字符,则输出“You chickened out.”;

* ( ps: 注意输出有句号)

* 我的解题方法是:

* 设置一个标记数组、因为输入的字符串由题意知道一定是小写字母,所以用标记数组标记第一个字符串中出现的字母,然后让第二个字符串挨个尝试匹配,若成功

* 则进行第二个字符串的下一个字符匹配,在匹配的过程中随时判断三种输出情况中的前两种(一定要在过程中判断、因为比如说假如第二个字符串中可能总的猜错次数 * 是大于等于7的,可是在7之前它就有可能匹配成功了! 这是一个注意的要点!),最后如果都没有输出的话则输出第三种情况。

*/

#include <stdio.h>
#include <string.h>
int main( )
{
    int n;
    int i,j;
    int len1 , len2;
    int flag,total , Flag;
    int vis[ 105 ];
    char s[ 5 ][ 105 ];

    while( scanf("%d",&n) && n != -1 )
    {
        memset( vis , 0 , sizeof( vis ) );
        getchar( );
        gets( s[ 0 ] );
        gets( s[ 1 ] );
        len1 = strlen( s[ 0 ] );
        len2 = strlen( s[ 1 ] );

        printf("Round %d\n",n );
        for( i=0;i<len1;i++ )
            vis[ s[0][i]-'a' ] = 1;

        flag = total = Flag = 0;
        for( i=0;i<len2;i++ )
        {
            for( j=0;j<len1;j++ )
                if( s[ 1 ][ i ] == s[ 0 ][ j ] )
                {
                    flag = 1;
                    vis[ s[1][i]-'a' ] = -1;
                    break;
                }
            if( !flag &&  !vis[ s[1][i]-'a' ]  )
            {
                vis[ s[1][i]='a' ] = -2;
                total++;
            }
            if( total == 7 )
            {
                Flag = 1;
                printf("You lose.\n");
                break;
            }
            
            flag = 0;
            for( j=0;j<26;j++ )
                if( vis[ j ] == 1 )
                {
                    flag = 1;
                    break;
                }
            if( !flag )
            {
                Flag = 1;
                printf("You win.\n");
                break;
            }
            flag  = 0;
        }
        if( !Flag )
            if( !flag ) printf("You chickened out.\n");
    }
    return 0;
}





分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics