思路:

  1. 将n转换为字符串类型,便于操作每个数位。

  2. 从高位到低位遍历每一位,如果当前数位前面有可以删除的数位,则删除该数位。

  3. 如果删除的数位达到了k个,则停止遍历,将剩余的数位组成新的整数。

  4. 如果遍历完所有数位,删除的数位数量仍然不足k个,则从低位开始删除多余的数位。

  5. 将剩余的数位组成新的整数,并输出。

代码实现:

#include <stdio.h>
#include <string.h>

int main()
{
    int n, k, m, i, j;
    char str[20];
    printf("请输入一个正整数n:");
    scanf("%d", &n);
    printf("请输入要删除的位数k:");
    scanf("%d", &k);
    sprintf(str, "%d", n);  // 将整数n转换为字符串类型
    m = strlen(str);  // 获取n的位数
    for (i = 0; i < m - 1 && k > 0; i++) {
        for (j = i + 1; j < m && k > 0; j++) {
            if (str[i] < str[j]) {
                // 如果当前数位前面有可以删除的数位,则删除该数位
                memmove(&str[i], &str[i + 1], j - i);
                k--;
                i--;  // 删除一个数位之后需要回退一位重新比较
                m--;  // 位数减一
                break;
            }
        }
    }
    // 如果删除的数位数量达到k个,则从剩余的数位中组成新的整数
    if (k == 0) {
        str[m - k] = '\0';  // 将字符串截断
        printf("删除%d位后的最大整数为:%s\n", k, str);
    }
    // 如果删除的数位数量不足k个,则从低位开始删除多余的数位
    else {
        str[m - k] = '\0';  // 将字符串截断
        printf("删除%d位后的最大整数为:%s\n", k, str);
    }
    return 0;
}

示例:

输入:

请输入一个正整数n:987654321
请输入要删除的位数k:3

输出:

删除3位后的最大整数为:987321
用c语言编写一个程序实现一下功能。给定一个十进制正整数n每个数位上数字均不为0n 的位数是m。现在从m位中删除k位0km求生成的新整数最大为多少。

原文地址: https://www.cveoy.top/t/topic/b8vo 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录