当前位置: 代码迷 >> C语言 >> 一道超简单的题目!看你会不会!!!!!
  详细解决方案

一道超简单的题目!看你会不会!!!!!

热度:430   发布时间:2008-06-22 17:33:59.0
这个用字符串做不难
----------------解决方案--------------------------------------------------------
飞燕是为算法而算法了……
追求效率也是要在有追求效率的必要下才追求的……
----------------解决方案--------------------------------------------------------
要求出整数的位数,和每位的数字,怎么求啊
----------------解决方案--------------------------------------------------------
飞燕的算法可算神妙无穷了,

但如果在实际应用中也这样,

维护程序的人会把你骂死的。。

根本就太难看懂啊。
----------------解决方案--------------------------------------------------------
怎样做的
----------------解决方案--------------------------------------------------------
我都想知道
----------------解决方案--------------------------------------------------------
程序代码:

#include <stdio.h>
#include <string.h>
#include <assert.h>

char* solve(char *m,int s)
{
    char *top;//top为栈顶的下一个位置
    char *next;//next为下一个要操作的字符
    int cnt=0;//已经删去字符的计数器
    top=next=m;
    while(cnt<s){
        if(top!=m && *(top-1)>*next){
            top--;
            cnt++;
        }
        else {
            *top++=*next++;
        }
    }
    strcpy(top,next);//可优化掉
    return m;
}   

char m[1000001];
int s;

int main()
{
    while(scanf("%s%d",m,&s)!=EOF){
        assert("题目中没有说明如果去掉的数字数比原本的数的长度还长时应该输出什么" &&strlen(m)>s);
        printf("%s\n",solve(m,s));
    }
}   

----------------解决方案--------------------------------------------------------
用最大数字沉底法做:就是从左到右两两比较,每次都把大的放在后面,把最后位舍掉后就会出现楼主说的输出结果。
----------------解决方案--------------------------------------------------------
......
----------------解决方案--------------------------------------------------------
从左往右找,找到第一个右边比左边小的数,去掉左边的数
----------------解决方案--------------------------------------------------------
  相关解决方案