P1106删数游戏

这道题曾经在CQOJ上考过,是第二次做了。

这是一道使用字符串的贪心题。首先要根据机组例子来确定:删除递增序列的最后一位。即循环找到那一位后,把后面的数往前压。所以我在艰难处理完双重循环后(这个处理不是很顺畅),便卡在了前导零上四次(CQOJ的数据太水)。最后看了下题解,将前导零处理好了,AC。

1.注意前导零的处理:while到第一个不是零的,如到头,则cout<<"0"

2.将string在开始时便后移一位,不然别扭

3.想贪心策略时要多拿几个例子,找到规律

伪代码:

cin>>a;
    cin>>s;
    len=a.length();
    while(s){
        i=0; 
        while(a[i]<=a[i+1]){//停留在递增序列最后一位
            i++; 
            }  
        while(i<=len-2){//往前压
            a[i]=a[i+1];
            i++;
        }  
        len--;
        s--;
    }
 i=0;
    while(i<=len-1&&a[i]=='0')i++;//处理前导0
    if(i==len)printf("0");
    else
        for(int j=i;j<=len-1;j++)
            printf("%c",a[j]);

猜你喜欢

转载自www.cnblogs.com/china-mjr/p/11210058.html