Gw_love_VC. 发表于 2013-1-4 23:49:02

删除算法



对于一个给定的数字(可能会很大),从中删除一定量的数字,使得余下的数字按原次序组成的数最大。我们保证原数的位数不超过50,删除数字的个数小于原数的位数。对于这个有什么想法呢?聪明的你快来解答吧!
Input:
输入为一组数据,第一行为输入的数字n,位数不超过50 (1 < lenth < 51);
第二行为删除数字的个数m(0 < m< lenth);
Output:
输出余下的数字按原次序组成的最大数
such as:
Input
785452362215
5//删除5个数
Output:
8562215答案回复可见{:5_109:}
**** Hidden Message *****

xii123 发表于 2013-1-14 11:50:27

表示有点不明白!!!

z____ 发表于 2013-1-16 02:29:06

这是什么..

Gw_love_VC. 发表于 2013-1-22 08:59:44

xii123 发表于 2013-1-14 11:50 static/image/common/back.gif
表示有点不明白!!!

这个题是用贪心的思想,前面每两个数进行比较删去较小项

qet119 发表于 2013-1-22 09:53:30

小败的星辰花 发表于 2013-2-24 22:59:31

法规及太突然

5zix2012 发表于 2013-3-6 07:23:08

表示有点不明白

871982921 发表于 2013-3-6 10:06:33

哦哦哦。。

颓废的青春 发表于 2013-3-6 10:31:53

表示没怎么看明白,不知道隐藏的是什么

桂林山水 发表于 2013-3-6 10:47:00

看不懂啊。。。。。。。。。。

七月之变 发表于 2013-3-6 11:19:47

这是我写的递归算法(个人觉得像贪心),不知道对不对……楼主给看看呗?
#include <iostream>
using namespace std;
void d(char* a, int n)
{
        if (n == 0)
        {
                return;
        }
        int max = '0';
        int index = 0;
        for (int i = 0; i <= n; i ++)
        {
                if (a > max)
                {
                        max = a;
                        index = i;
                }
        }
        for (int i = 0; i < index; i ++)
        {
                a = -1;
        }
        dfs(a+index+1, n-index);
}

int main()
{
        int n = 0;
        int length = 0;
        char a = {0};
        cin>>a;
        cin>>n;
        length = strlen(a);
        d(a, n);
        for (int i = 0; i < length; i ++)
        {
                if (a != -1)
                {
                        cout<<a;
                }
        }
        return 0;
}

七月之变 发表于 2013-3-6 11:20:53

呃, d打成dfs了……失误

coko 发表于 2013-7-2 20:35:44

看帖,必须回帖

fishmo 发表于 2013-7-2 23:53:11

看看老帖,支持下

wuqramy 发表于 2020-4-15 15:04:03

答案是什么
页: [1]
查看完整版本: 删除算法