【C语言】求最小新整数(贪心算法)

文章目录

题目描述

给定一个十进制正整数n(0 < n < 1000000000),每个数位上数字均不为0。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

方法一

c 复制代码
#include<iostream>
using namespace std;
int k;
main()
{
	int t;
	cin>>t;
	while(t--)
	{
		string n; 
		cin>>n>>k;
		int len=n.size();
		while(k--)
			for(int i=0;i<len;i++) 
				if(n[i]>n[i+1]||i==len-1) //删除遇到的第一个递减序列的第一个数字(若整个字符串为非递减序列,则删去末尾的数字)
				{
					n.erase(i,1); //把当前字符从字符串中删除
					break; //不可省略,否则字符串会多删字符
				}
		while(n[0]=='0'&&n[1]) //去掉前缀0,并至少保留1个数字
			n.erase(0,1); //删去当前字符串开头的'0'
		cout<<n<<endl; //输出字符串
	}
}

方法二

c 复制代码
#include<stdio.h>
#include<string.h>

int main() {
    int t, k;
    char a[200];
    scanf("%d", &t); 
    while (t--) { 
        int i, j, l;
        scanf("%s %d", a, &k); 
        int len = strlen(a); 
        for (i = 0; i < k; i++) { // 执行 k 次删除操作
            for (j = 0; j < len - 1; j++) { // 找到第一个逆序对并删除
                if (a[j] > a[j + 1]) {
                    for (l = j; l < len - 1; l++) { // 删除逆序对
                        a[l] = a[l + 1];
                    }
                    break;
                }
            }
            len -= 1; // 每删除一个字符,字符串长度减一
        }
        for (i = 0; i < strlen(a) - k; i++) { // 输出删除后的字符串
            if (i == 0 && a[i] == '0') { // 如果删除后的字符串以0开头,则跳过0
                continue;
            }
            printf("%d", a[i] - '0');
        }
        printf("\n");
    }
    return 0;
}
相关推荐
阿里嘎多学长7 分钟前
2026-07-10 GitHub 热点项目精选
开发语言·程序员·github·代码托管
CHHH_HHH34 分钟前
【C++11】深入解析C++可变参数模板
开发语言·c++·算法·stl·c++11
jimy13 小时前
C语言模拟对象、方法:“函数指针+结构体“复用函数指针指向的函数体
c语言·开发语言
天外天-亮3 小时前
HBuilder X 使用 uview-plus 方式
开发语言·javascript·hbuilder x·uview-plus
三品吉他手会点灯3 小时前
嵌入式机器学习 - 学习笔记1.1.1 - 什么是机器学习?
c语言·人工智能·笔记·嵌入式硬件·学习·机器学习
木木子223 小时前
[特殊字符] 音乐播放器——状态驱动的多媒体控制
android·开发语言·华为·php·harmonyos
六个九十度4 小时前
用python脚本访问被网关隔离的嵌入式设备
开发语言·python
酷酷的身影4 小时前
Drivers/LedManager.cs
开发语言·php
小樱花的樱花4 小时前
Linux 线程的创建
linux·c语言·开发语言
xiaoshuaishuai85 小时前
C# AI实现PR处理、单元测试
开发语言·c#·log4j