算法第4章实践报告

Posted xm-dream

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法第4章实践报告相关的知识,希望对你有一定的参考价值。

1.实践题目

7-2 删数问题

2.问题描述

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

输入格式:第 1 行是1 个正整数 a。第 2 行是正整数k。

输出格式:输出最小数。

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

178543 
4 

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

13

3.算法描述

运用贪心算法求解,从前往后比较,若第i个数比第i+1个数大,则用第i+1个数覆盖第i个数,否则继续,直到最后一个数;如果被覆盖的数的个数少于题目要求删掉的个数,继续重复覆盖操作。

代码如下:

 1 #include<string.h>
 2 #include<iostream>
 3 using namespace std;
 4 int main()
 5 {
 6   int i ,k;
 7   char a[100];
 8     cin>>a>>k;
 9     int len = strlen(a);
10     while (k>0){
11         i=0;
12         while(i<len&&a[i]<=a[i+1])i++;
13         while(i<len){
14             a[i]=a[i+1];
15             i++;
16         }
17         k--;
18     }
19     i=0;
20     while(a[i]==0&&i<len)
21         i++;
22     if (a[i]==)cout<<0;
23     else{
24         for(int j=i;j<len;j++)
25             cout<<a[j];
26     }
27     return 0;
28 }
29   

 

4.算法时间及空间复杂度分析

时间复杂度:代码的核心算法有两重循环,循环次数是k*n(k是删除的个数,n是正整数a的位数),所以时间复杂度是O(kn);

空间复杂度:使用了一个数组来存储n位正整数a,所以空间复杂度是O(n);

5.心得体会

做这道题主要是卡在了输出那里,因为考虑问题不够全面,没有对最后得到的字符串前导的0进行处理,导致很多测试点都过不了,最后通过向老师以及班里的同学请教,终于解决了。还有就是,当局者迷旁观者清,有时候自己写出来的东西,明明就是有bug,但就是怎么看都看不出问题来,而旁人一眼就看出来哪里有问题,所以实在找不出问题的时候,请教别人可以避免浪费时间。

以上是关于算法第4章实践报告的主要内容,如果未能解决你的问题,请参考以下文章

算法第4章实践报告

算法第4章实践报告

算法第4章实践报告

算法第4章实践报告

算法第4章实践报告

算法第4章实践报告