UVa 644 立即可解码性

/*

* 解题思路:

* 题意是: 判断输入的多组数据中,有无哪组数据是另一组数据的前缀、相应输出结果即可

* 开始一直WA、是没有控制好假如一个字符串有多组匹配字符串,要控制只输出一次( 怪自己粗心 )!

*/



#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define A 100
int cmp( const void * _a , const void * _b )
{
    char *a = ( char *)_a;
    char *b = ( char *)_b;
    if( strlen( a ) < strlen( b ) ) return 1;
    if( strlen( a ) > strlen( b ) ) return -1;
    return strcmp( a , b );
}
int main( )
{
    int p,q;
    int i,j,k;
    int flag,total,vis;
    char ss[ A ][ A ];
    char c;

    c = '0';
    total = 1;
    while( c != EOF )
    {
        p = q = vis = 0;
        while( ( c = getchar( ) ) != '9' && c != EOF )
        {
            vis =1;
            if( c == '0' || c == '1' ) ss[ p ][ q++ ] =  c;
            else
            {
                ss[ p ][ q ] = '\0';
                p++;
                q = 0;
            }
        }
        if( c!=EOF )
            c = getchar( );
        if( vis )
        {
             qsort( ss , p , sizeof( ss[ 0 ] ) , cmp );
              vis = 0;
              for( i=0;i<p;i++ )
              {
                    for( j=p-1;strlen( ss[ i ] ) > strlen( ss[ j ] )  ; j-- )
                    {
                        flag = 1;
                        for( k=0;k<strlen( ss[ j ] ) ;k++ )
                            if( ss[ i ][ k ] != ss[ j ][ k ] )
                            {
                                flag = 0;
                                break;
                            }
                         if( flag )
                        {
                            vis = 1;
                            printf("Set %d is not immediately decodable\n",total++);
                            break;
                        }
                    }
                    if( vis ) break;
              }
            if( !vis ) printf("Set %d is immediately decodable\n",total++ );
        }
    }
    return 0;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值