/*                                    寻找最大数
  题目内容:

请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大,
比如当n=92081346718538,m=10时,则新的最大数是9888

输入描述

第一行输入一个正整数T,表示有T组测试数据每组测试数据占一行,每行有两个数n,m(n可能是一个很大的整数,但其位数不超过100位,并且保证数据首位非0,m小于整数n的位数)

输出描述

每组测试数据的输出占一行,输出剩余的数字按原次序组成的最大新数

输入样例

2
92081346718538 10
1008908 5

输出样例

9888
98
*/
//暴力求解,循环搜索m次逆序的将其去掉,通过将其赋为后面大的那个数的相反数,如果有m个逆序,那得到的除去负值就是该
//求最大数,如果去掉的不足m个,显然前面len - m个非负数就是所求最大数。

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;

int main(){
    char a[105];
    int b[105], c[105];
    int n;
    cin >> n;
    while(n--){
        int m;
        cin >> a;    
        cin >> m;
        int count = 0, len = strlen(a);
        for(int i = 0; i < len; i++)
            b[i] = a[i] - '0';
        for(int j = 0; j < m; j++)
            for(int i = 0; i < len - 1, count <= m; i++){
                if(b[i] >= 0 && b[i] < abs(b[i + 1])){
                    b[i] = - abs(b[i + 1]);
                    count++;
                    break;
                }
            }
        int s = 0;
        for(int i = 0; i < len; i++){
            if(b[i] >= 0){
                c[s++] = b[i];
            }
        }
        int len1 = len - m, cc = 0;
        for(int i = 0; i < s; i++){
            cout << c[i];
            cc++;
            if(cc >= len1)
                break;
        }
        cout << endl;
    }
    return 0;
}

核心思想:比如  92081346718538   这个数,去掉十个数之后,按原来的次序组成最大数,那么开始计算,
一共14位数,如果去掉十位数,剩四位数,要想这四位数最大,那么逐次查找,使得首位最大才是结果最大
的前提:一:从前11位开始查找,找到一位最大数,对这个位置做个标记flag;二,从flag到第12位数,找
到最大值,再做标记flag,依次循环,,,,,,直到找到最后结果为止

#include<stdio.h>
#include<string.h>
#define M 101
char a[M],b[M];
int i,j,n,m,flag;
int main()
{
    int k;
    scanf("%d",&k);    
    while(k--)
    {
        j=0;flag=0;
        memset(a,0,sizeof(a));
        scanf("%s %d",a,&m);
        n=strlen(a);
        for(int w=m;w<n;w++)
        {
            char max=a[flag];
            for(i=flag;i<=w;i++)
            {
                if(max<a[i])
                {
                    max=a[i];
                    flag=i;
                }
            }
            b[j++]=max;
            a[flag]='0';
        }
        puts(b);
    }
    return 0;
}

25-删除m位数是剩下的最大的更多相关文章

  1. hdu 4587 推断孤立点+割点+ 删除点之后,剩下多少连通分量

    做了非常久...... 题目链接:  http://acm.hdu.edu.cn/showproblem.php?pid=4587 先枚举删除的第一个点,第二个点就是找割点.没有割点当然也有答案 学到 ...

  2. 删除一个数的K位使原数变得最小

    原创 给定一个n位正整数a, 去掉其中k个数字后按原左右次序将组成一个新的正整数.对给定的a, k寻找一种方案,使得剩下的数字组成的新数最小. 提示:应用贪心算法设计求解 操作对象为n位正整数,有可能 ...

  3. sed 删除用法

    sed ‘1,4d’ dataf1 #把第一行到第四行删除,并且显示剩下的内容 sed ‘/La/d’ dataf2 #把含有 La 的行删除 sed ‘/La/!d`’#把不含 La 的行删除,!是 ...

  4. 使用AutoIT对增加和删除文件属性的实现

    编写历程: 前段日子,晚上下班回家,一个舍友问我可不可以将一个目录下的隐藏文件全部显示出来(变成非隐藏文件),我说可以. 之后就开始大刀阔斧的寻找方法来做这件事,上网找,说需要一个Windows下的小 ...

  5. 一个iOS图片选择器的DEMO(实现图片添加,宫格排列,图片长按删除,以及图片替换等功能)

    在开发中,经常用到选择多张图片进行上传或作其他处理等等,以下DEMO满足了此功能中的大部分功能,可直接使用到项目中. 主要功能如下: 1,图片九宫格排列(可自动设置) 2,图片长按抖动(仿苹果软件删除 ...

  6. IT公司100题-18-圆圈中最后剩下的数字

    问题描述: n个数字(下标为0, 1, …, n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(当前数字从1开始计数).当一个数字被删除后,从被删除数字的下一个数字开始计数,继续删除 ...

  7. iOS学习之--字符串的删除替换(字符串的常用处理,删除,替换)

    字符串操作,比较简单,仅做记录! 1.删除 NSString *str1 = @"<hello,wo r d!>"; //删除字符串两端的尖括号 NSMutableSt ...

  8. PAT甲题题解-1013. Battle Over Cities (25)-求联通分支个数

    题目就是求联通分支个数删除一个点,剩下联通分支个数为cnt,那么需要建立cnt-1边才能把这cnt个联通分支个数求出来怎么求联通分支个数呢可以用并查集,但并查集的话复杂度是O(m*logn*k)我这里 ...

  9. iOS学习-字符串的删除替换

    字符串的常用处理,删除,替换.记录一下,方便查找. -------------------------------------------------------------------------- ...

随机推荐

  1. 外网访问XAMPP失败 解决方案

    xampp 访问出现New XAMPP security concept 收藏 New XAMPP security concept: Access to the requested director ...

  2. PHPExcel导入导出 若在thinkPHP3.2中使用(无论实例还是静态调用(如new classname或classname::function)都必须加反斜杠,因3.2就命名空间,如/classname

    php利用PHPExcel类导出导入Excel用法 来源:   时间:2013-09-05 19:26:56   阅读数: 分享到: 16 [导读] PHPExcel类是php一个excel表格处理插 ...

  3. golang web框架 beego 学习 (一) 环境搭建

    下面的命令我都是在$GOPATH的路径下执行的: 1. 首先下载beego框架: go get github.com/astaxie/beego (注意:运行上面命令时没有反应,需要在etc/host ...

  4. php中csv文件的下载

    使用header头部定义就可以,一下为阿拉蕾项目文件下载的部分代码:$user_infos = “”;if(!empty($download)) { header("Content-type ...

  5. UVA548

    题意: 根据二叉树中序和后序建立二叉树,从根结点开始计算和到叶子结点,输出总和最小的叶子结点,如果有俩个和一样大,输出叶子结点最小的 AC:80ms #include<stdio.h> # ...

  6. Mysql数据库查询数据文件大小

    参考网站:https://zhidao.baidu.com/question/201227796936321525.html 用SQL命令查看Mysql数据库大小 要想知道每个数据库的大小的话,步骤如 ...

  7. Sqlserver查询数据库文件大小和剩余空间

    在MS Sql Server中可以能过以下的方法查询出磁盘空间的使用情况及各数据库数据文件及日志文件的大小及使用利用率: 1.查询各个磁盘分区的剩余空间:Exec master.dbo.xp_fixe ...

  8. leetcode965

    public class Solution { List<int> list = new List<int>(); private void postTree(TreeNode ...

  9. leetcode404

    /** * Definition for a binary tree node. * public class TreeNode { * public int val; * public TreeNo ...

  10. 23.OGNL与ValueStack(VS)-调用普通类的构造方法

    转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 建立一个新的类:Student,在此省略代码. 然后在loginSuc.js ...