SDUT 2072 删数问题

本文探讨了如何通过编程方法解决一个特定的数学问题:从一个高精度的正整数中去除指定数量的数字,使得剩余数字组成的数为最小。文章详细解释了算法逻辑,并提供了实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我做这个题了解到的是要注意的是删除过程中可能会使原来包含0的数字串变成若干个以0开始的序列,当遇到数字串首位是0的时候,把高位的0去掉。

题目描述

 键盘输入一个高精度的正整数n(≤100位),去掉其中任意s个数字后剩下的数字按照原来的左右次序组成一个新的正整数。编程对给定的n与s,寻找一种方案,使得剩下的数字组成的新数最小。

输入

  输入有多组 每组包括原始数n,要去掉的数字数s;

输出

 输出去掉s个数后最小的数

示例输入

178543  4

示例输出

13


View Code
 1 #include<stdio.h>
 2 #include<string.h>
 3 void main()
 4 {
 5     int n,i,j;
 6     char a[101];
 7     while(scanf("%s",a)!=EOF)
 8     {
 9         scanf("%d",&n);
10         while(n)
11         {
12             i=0;
13             while(i<strlen(a)&&a[i]<=a[i+1])
14                 i++;
15             while(i<strlen(a))
16             {
17                 a[i]=a[i+1];
18                 i++;
19             }
20             n--;
21         }
22         for(i=0;i<strlen(a);i++)
23         {
24             if(a[i]!='0')
25             {
26                 printf("%c",a[i]);
27                 break;
28             }
29         }
30         for(j=i+1;j<strlen(a);j++)
31             printf("%c",a[j]);
32         puts("");
33             
34         
35         
36     }
37 }

 

转载于:https://www.cnblogs.com/timeship/archive/2012/05/27/2519824.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值