删数问题:
给定n位正整数a,去掉其中任意k≤n 个数字后,剩下的数字按原次序排列组成一个新 的正整数。对于给定的n位正整数a和正整数 k,设计一个算法找出剩下数字组成的新数最 小的删数方案。
思想:
用字符串数组a[k]记录n位正整数a,对正整数a进行“从最高位向最低位”的扫描,设flag记录当前扫描到的位置,比较flag位的数字和falga+1位的数字,若比较结果是“<=”,则flag+1,继续向后扫描;若比较结果是\">\",则所有flag后的数字向前移动一位,代表删掉flag位上的数字。
1 #include
2 #include <string.h>
3 using namespace std;
4 char a[1005];
5 int main()
6 {
7 int k,n = 0;
8 cin >> a >> k;
9 int len = strlen(a);
10 if (k >= len) //如果要删除的数字数目k比n大,直接返回0
11 {
12 cout << 0;
13 }
14 while (k > 0) //判断是否已经删除足够多的数字
15 {
16 int i = 0;
17 while (i <= len && a[i] <= a[i+1])
18 {
19 i++;
20 }
21 for (int j = i; j <= len; j++)
22 {
23 a[j] = a[j+1];
24 }
25 k–;
26 len–; //字符串在删除一个数字后长度-1
27 }
28 while (a[n] == ‘0’)
29 n++;
30 for ( ; n <= len; n++)
31 cout << a[n];
32 return 0;
33 }
继续阅读与本文标签相同的文章
-
携程、阿里、京东、腾讯iOS春招面试过程以及面试题总结!
2026-05-19栏目: 教程
-
浏览器事件机制中 事件触发的三个阶段
2026-05-19栏目: 教程
-
德媒:德国5G安全标准“一视同仁”,5G建设不排除华为
2026-05-19栏目: 教程
-
简单了解 JavaScript的组成
2026-05-19栏目: 教程
-
阿里云如何备份虚拟机?
2026-05-19栏目: 教程
