Delete Number——百思不得其解

昨天逛一论坛,遇到一道 acm题,地址是 http://acmpj.zstu.edu.cn/JudgeOnline/showproblem?problem_id=2511
大致意思是从一个有 n 位的整数中删除 k 位,使剩下的数字按原来的顺序组成的数最小。
我的代码总是 WA,不知有没有大牛路过,指点一二,在此谢。
我的思路是这样:
步骤一:在第 1  位到第 k+1 位之间(含第 k+1 位)找出最小的数字,记录这个数字所在的位数p;
步骤二:再从第 p 位到第 k+2 位之间找出最小的数字,再记录此数所在的位数p;
后面重复 n-k 次前面的操作,这样按顺序输出每一次操作得到的最小数字即可。当然输出时注意去掉起始的若干个0。
下面是代码
#include < stdio.h >
#include
< string .h >
char  a[ 1005 ] = " \0 " ,rslt[ 1005 ] = " \0 " ;
int  main()
{
    
int  T,k,n,i,j,lp;
    scanf(
" %d " , & T);
    
while (T -- )
    {
        scanf(
" %d " , & k);
        scanf(
" %s " ,a);
        n
= ( int )strlen(a);
        
if (k == n)
        {
            printf(
" 0\n " );
            
continue ;
        }
        lp
=- 1 ;
        
for (j = 0 ;j < n - k;j ++ )
        {
            lp
++ ;
            rslt[j]
= a[lp];
            
for (i = lp;i < k + j + 1 ;i ++ )
            {
                
if (rslt[j]  >  a[i])
                {
                    rslt[j]
= a[i];
                    lp
= i;
                }
            }
        }
        i
= 0 ;
        
while ( * (rslt + i) == ' 0 '   &&   * (rslt + i) != ' \0 ' ) i ++ ;
        printf(
" %s\n " ,rslt + i);
        memset(a,
0 , sizeof (a));
        memset(rslt,
0 , sizeof (rslt));
    }
    
return   0 ;
}

你可能感兴趣的:(Delete Number——百思不得其解)