算法第四章作业

作业:

1.贪心算法:就是通过求局部最优解,并将所有局部最优以相似的方式求得并结合,进而得到全局最优解的一种算法。

2.满足性质:通过观察,我们能发现,每次去除的数字具有一定的特征,也就是从左到右,递增序列的最后一个数即为去除数(递增序列里面可以出现相等的数,所以才取最后一个)。因此根据这个局部最优解,可以依次以相同的方法去除需要满足的个数,从而达到全局最优

3.问题:没观察出来这样的性质,一开始都是直接上,结果算法错了都不知道。结对编程跟以往一样,没多大问题。

 

选题:     4-2 删数问题 (110分)

 

给定n位正整数a,去掉其中任意k≤n 个数字后,剩下的数字按原次序排列组成一个新 的正整数。对于给定的n位正整数a和正整数 k,设计一个算法找出剩下数字组成的新数最 小的删数方案。

输入格式:

第 1 行是1 个正整数 a。第 2 行是正整数k。

输出格式:

输出最小数。

输入样例:

在这里给出一组输入。例如:

178543 
4 

输出样例:

在这里给出相应的输出。例如:

13

 1 #include <iostream>
 2 #include <cstring>
 3 using namespace std;
 4 
 5 const int maxn=1000;
 6 char a[maxn];
 7 
 8 int main()
 9 {
10     
11     int k;
12     scanf("%s%d",a,&k);
13     
14     int len=strlen(a);
15     
16     int i;
17     while(k--){
18         i=0;
19         while(a[i]<=a[i+1]){
20             i++;
21         }
22         /*
23         从后往前移数组,将元素移除,
24         这样才能方便下次删除元素
25         */
26         while(i<len-1){
27             a[i]=a[i+1];
28             i++;
29         }
30         len--;//长度减一
31     }
32 
33     //排除最高位的0
34     int j=0;
35     while(a[j]=='0'){
36         j++;
37     }
38     //输出
39     for(i=j;i<len;i++){
40         printf("%c",a[i]);
41     }
42     
43     return 0;
44 }

 

 
posted @ 2020-11-14 08:44  詹迪明  阅读(98)  评论(0编辑  收藏  举报