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

请在整数 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. tp5模型笔记---多对多

    关联模型 一对一:HAS_ONE  以及对应的BELONEGS_TO 一对多:HAS_MANY 以及相对的BELONGS_TO 多对多:BELONGS_TO_MANY 步骤: 第一:创建Users模型 ...

  2. Android RILD运行机制详解

    前言 在上一篇文章里(http://blog.csdn.net/jason_wzn/article/details/53232022),简要介绍了Android RIL的架构.这一篇文章,就来看一看R ...

  3. Vector的小知识点

    预留容量的两类方式: 1.不调用默认的构造函数 vector<int> v; v.push_back(111); v.reserve(20); std::copy(v.begin(), v ...

  4. NHibernate 学习笔记(一)

    NHibernate 的简介: NHibernate是一个面向.NET环境的对象/关系数据库映射工具.对象/关系数据库映射(object/relational mapping (ORM))这个术语表示 ...

  5. 在IDEA下使用Spring Boot的热加载(Hotswap)

    你是否遇到过这样的困扰: 当你写完一段代码后,要看到效果,必须点击IDEA的停止按钮,然后再次重启启动项目,你是否觉得这样很烦呢? 如果你觉得很烦,本文就是用来解决你的问题的. 所谓热加载,就是让我们 ...

  6. HTML5 移动端 自定义点击事件

    /* 封装的TAP事件 */ (function () { /** * IOS 和 PC 端 只需要创建一次就能一直使用 * Android 手机 每次使用的时候都需要从新创建 */ function ...

  7. WebRTC内置debug工具,详细参数解读 chrome://webrtc-internals/

    为了确保这篇文章所写内容尽可能的准确,我决定请来Philipp Hancke来作为此篇文章的共同作者. 当你想要找到你WebRTC产品中的问题时,webrtc-internals是一个非常棒的工具,因 ...

  8. 浅谈Http、TCP、UDP和 IP 的的区别

    应用层:Http,超文本传输协议(HyperText Transfer Protocal):利用TCP在两台电脑(通常是Web服务器和客户端)之间传输信息的协议.客户端使用Web浏览器发起HTTP请求 ...

  9. windows系统安装参数

    winnt32 /dudisable /s:. /unattend:winnt.sif /makelocalsource /tempdrive:C /syspart:C 以上各参数解释如下: /dud ...

  10. as2 loadClip

    loadClip(url:String, target:Object) : Boolean target是直接被赋值,而不是add进去