HDU 1004 Let the Balloon Rise我的程序为何会WA啊求助!

#include<stdio.h>#include<string.h>chars[1010][16],maxs[16];intcmp(constvoid*p,constv... #include<stdio.h>
#include<string.h>
char s[1010][16], maxs[16];
int cmp( const void *p, const void *q )
{
return strcmp( ( char * )p, ( char * )q );
}
int main()
{
int i, n = 1, k, maxest, samen;

while ( 1 == 1 )
{
memset( maxs, 48, sizeof( maxs ) );
maxest = 0;
scanf( "%d", &n );
k = 1;

if ( n == 0 )
break;

for ( i = 1; i <= n; i++ )
scanf( "%s", s[i] );

qsort( s[1], n, sizeof( s[0] ), cmp );

while( k < n )
{
k++;

if ( strcmp( s[k], s[k - 1] ) == 0 )
{
samen = 1;
k--;

while( k < n )
{
k++;

if ( strcmp( s[k], s[k - 1] ) == 0 )
samen += 1;
else if ( samen > maxest )
{
sprintf( maxs, "%s", s[k - 1] );
maxest = samen;
k--;
break;
}
else
{
k--;
break;
}
}

if ( samen > maxest )
{
sprintf( maxs, "%s", s[k] );
maxest = samen;
}
}
}

printf( "%s\n", maxs );
}

return 0;
}
我是把读入的所有数据排序了 再输出次数最多的颜色!
展开
 我来答
liruih8121099
游戏玩家

2014-08-18 · 游戏我都懂点儿,问我就对了
知道小有建树答主
回答量:561
采纳率:75%
帮助的人:168万
展开全部

很明显的,你的程序如果是 n = 1的时候进不去循环 while(k < n) 的循环,所以答案肯定错了啊。

可以对n=1的情况进行特判:

#include<stdio.h>
#include<string.h>
#include <algorithm>
char s[1010][16], maxs[16];
int cmp( const void *p, const void *q )
{
    return strcmp( ( char * )p, ( char * )q );
}
int main()
{
    int i, n = 1, k, maxest, samen;

    while ( 1 == 1 )
    {
        memset( maxs, 48, sizeof( maxs ) );
        maxest = 0;
        scanf( "%d", &n );
        k = 1;

        if ( n == 0 )
            break;

        for ( i = 1; i <= n; i++ )
            scanf( "%s", s[i] );

        qsort( s[1], n, sizeof( s[0] ), cmp );

        while( k < n )
        {
            k++;

            if ( strcmp( s[k], s[k - 1] ) == 0 )
          简渣余  {
                samen = 1;
                k--;

                while( k < n )
                {
                    k++;

                    if ( strcmp( s[k], s[k - 1] ) == 0 )
                        samen += 1;
                    else if ( samen > maxest )
                    {
                       梁厅 sprintf( maxs, "%s", s[k - 1] );
                        maxest = samen;
                        k--;
                        break;
                    }
                    else
                    {
                        k--;
                        break;
                    }
                }

                if ( samen > 拦滚maxest )
                {
                    sprintf( maxs, "%s", s[k] );
                    maxest = samen;
                }
            }
        }
        if(n != 1)
        printf( "%s\n", maxs );
        else
        printf( "%s\n", s[1] );
    }

    return 0;
}
更多追问追答
追问
我是谁
我试试
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式