posts - 21, comments - 2, trackbacks - 0, articles - 0

Delete Number——百思不得其解

Posted on 2011-05-11 23:38 acpeng 阅读(677) 评论(0)  编辑 收藏 引用 所属分类: ACM程序
昨天逛一论坛,遇到一道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;
}

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理