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

请在整数 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. javascript创建对象之构造函数模式(二)

    对上一章节的工厂模式进行代码重写 function Human(name, sex) { this.name = name; this.sex = sex; this.say = function ( ...

  2. HP-UX oracle RAC 双机实践 (转载)

    一.软硬件配置检查 1.检查内存#/usr/contrib/bin/machinfoCPU info:  4 Intel(R) Itanium 2 9100 series processors (1. ...

  3. 经典算法 Morris遍历

    内容: 1.什么是morris遍历 2.morris遍历规则与过程 3.先序及中序 4.后序 5.morris遍历时间复杂度分析 1.什么是morris遍历 关于二叉树先序.中序.后序遍历的递归和非递 ...

  4. 20180130之PYTHON学习笔记【PYTHON3写个自动听课功能】

    -----------------------原始实现想法------------ import pyautoguifrom PIL import Image#img=Image.open('c:/p ...

  5. Python正则总结

    re总结 限定符(就是控制重复次数) ? 匹配前面的子表达式零次或一次.例如,"do(es)?" 可以匹配 "do" . "does" 中的 ...

  6. JAVA Spring JdbcTemplate ( 以 SQLSERVER 为例 ) 的简单使用

    < 1 > 配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&q ...

  7. mybatis - maven - eclipse 坑爹问题: No suitable driver found for http://maven.apache.org

    坑爹的问题,调查了1天 一直以为是驱动问题,根源却在url上:No suitable driver found for http://maven.apache.org 根源: 1.在jdbc.prop ...

  8. .NET Framework 官方下载地址

    .net framwork 官方下载地址 3.5 https://www.microsoft.com/zh-cn/download/details.aspx?id=25150 .NET Framewo ...

  9. 9 python 多态与多态类

    1.多态定义 多态指的是一类事物的多种形态 比如动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.ABCMeta): @abc.abstractm ...

  10. Java多线程之使用ATM与柜台对同一账户取钱

    钱数要设置成静态的变量,两种取钱方式操作的是同一个银行账户! 废话不多说,直接上代码.注释写的都很详细!!! package com.thread.multi2; public class Bank ...