当前位置:首页 > 题解目录 > 正文内容

【题解】最小新整数

亿万年的星光4年前 (2021-05-01)题解目录2117

4.最小新整数(smallest.cpp)


【题目描述】

假如:有一个十进制正整数n,每个数位上数字均不为0,并且0<n<1000000000。n的位数为m。先在从m位中删除k位(0<k<m),求生成的新整数最小为多少?

如:n=9128456,k=2,则生成的新整数最小为12456。

【输入描述】

第一行t,表示有t组数据;

接下来t行,每一行表示一组测试数据,每组测试数据包含两个数字n,k。

【输出描述】

t行,每行一个数字,表示从n行中删除k位后得到的最小整数。

【样例输入】

2
9128456 2
1444 3


【样例输出】

12456
1

【题目分析】

  • 贪心算法中的字典序类问题

  • 要整数最小,那么最高位要最小,次高位要在此基础上再最小……因此,我们可以先确定最高位的数,在确定次高位的,这样一直下去,知道整个数确定为止。

  • 一个数字有n位,删除m位,也就是保留n-m位。



【参考代码1】

#include<bits/stdc++.h>
using namespace std;
int main() {
	int i, n, len, t;
	char a[105];
	int cnt;
	cin>>cnt;
	while(cnt--) {
		cin>>a>>n;
		t = n;
		len = strlen(a);
		if(len <= t) { //要删除的数量大于总长度,直接为0
			printf("0\n");
			continue;//及时跳出
		}
		while(n--) {
			i = 0;
			while(a[i] <= a[i + 1]) { //由左到右找到第一个最大的数(所在分位最大)
				i++;
			}
			for(; i < len; i++) { //删除此(相比较的最大分位)最大值
				a[i] = a[i + 1];
			}
			len--;
		}
		printf("%s\n", a);
	}
	return 0;
}


【参考代码2】

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char str[100];
int main()
{
    int t,n;
    cin>>t;
    while(t--)
    {
        cin>>str>>n;
        int len=strlen(str);
        while(n--)
        {
            for(int i=0;i<len-1;i++)
                if(str[i]>str[i+1])
                {
                    for(int j=i;j<len-1;j++)
                        str[j]=str[j+1];
                    break;
                }
            len--;
        }
        str[len]='\0';
        cout<<str<<endl;
    }
    return 0;
}


扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

标签: 贪心
分享给朋友:

相关文章

绝对素数

【题目描述】如果一个自然数是素数,且它的数字位置经过对换后仍为素数,则称为绝对素数,例如13。试求出所有二位绝对素数。【输入描述】无【输出描述】所有二位绝对素数(由小到大,一个数一行)。【输入样例】无...

【题解】上学线路(2019青岛市程序设计比赛)

【题解】上学线路(2019青岛市程序设计比赛)

 【题目描述】小D从家到学校的道路结构是这样的:由n条东西走向和m条南北走向的道路构成了一个n*m的网格,每条道路都是单向通行的(只能从北向南,从西向东走)。已知小D的家在网格的左上角,学校...

【题解】后缀表达式的值

【题解】后缀表达式的值

【题目描述】从键盘读入一个后缀表达式(字符串),只含有0-9组成的运算数及加(+)、减(—)、乘(*)、除(/)四种运算符。每个运算数之间用一个空格隔开,不需要判断给你的表达式是否合法。以@作为结束标...

【题解】骨牌铺方格

【题解】骨牌铺方格

【题目描述】有1×n(n<=50)的一个长方形,用一个1×1、1×2和1×3的骨牌铺满方格,请问有多少种铺法?例如当n=3时为1×3的方格。此时用1×1、1×2和1×3的骨牌铺满方格,共有四种铺...

【题解】队列问题

【题解】队列问题

4.队列问题(lru.cpp)【题目描述】有一个大小为n的页面缓存队列,初始为空,当计算机访问页面时,若缓存队列没有该页面,则加入到缓存队列中,若队列已满,则将删除访问时间最远的页面。有Q次询问,每次...

【题解】将钱分给最多的儿童

【题目描述】给你一个整数 money ,表示你总共有的钱数(单位为美元)和另一个整数 children ,表示你要将钱分配给多少个儿童。你需要按照如下规则分配:...