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

【题解】最小新整数

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

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;
}


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

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

    标签: 贪心
    分享给朋友:

    相关文章

    【题解】切比雪夫距离

    【题目描述】小C有一个平面!它发现了平面上的两个点,请你求出求它们之间的切比雪夫距离。切比雪夫距离定义为x与y方向坐标差的绝对值较大值。【输入描述】四个整数,a,b,c,d。坐标为(a,b)与(c,d...

    【题解】区间和

    1.区间和(sum.cpp)【描述】输入一个整数Q,进行Q次询问,每次给定两个整数l和r,每一次输出l~r中所有平方数的和 % 1000000007【输入】第一行是一个整数Q后面的Q行每行有...

    【题解】飞奔的马

    【题目描述】农场里的马,在草场开心地吃着牧草,直到天色晚了,牧马的人会将马依次按号牌大小,依次放入相应的位置。但是这马总是打乱了顺序,于是牧马人都会想办法把这些马都排好:每次从最前面开始,然后与后面的...

    进制转换(1)

    【题目描述】毛毛是个健忘的孩子,编程课上老师刚讲过进制转换的问题,她又忘了。请你帮他编写一个程序,完成一个浮点数与二进制之间的相互转换【输入描述】两个数字,第一个数字表示要转换的数字,浮点型。第二个是...

    【题解】真分数(2019青岛市程序设计竞赛)

    【描述】真分数,指的是分子比分母小的分数,真分数的分数值小于1。给出n个正整数,任取两个数分别作为分子和分母组成真分数。求能组成多少不同值的真分数。【输入】第一行是一个正整数n。第二行是n个不同的正整...

    【算法】最短路径

    【算法】最短路径

    【题目描述】下图表示从城市A到城市H的交通图。从图中可以看出,从城市A到城市H要经过若干个城市。现在找出一条经过城市最少的一条路线。【输入描述】第一行一个整数n,表示几个城市。接下来2~n+1行,表示...