算法第四章上机实践报告

算法第四章上机实践报告

一、实践题目名称

删数问题

二、问题描述

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

输入格式:

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

输出格式:

输出最小数。

 

 

三、算法描述

1、定义:定义一个字符串数组变量a【】,用于存储输入的正整数,以便一个一个遍历每一个数组,方便删除和查找。

2、运用贪心法

若要删除n个数字,则循环n次,每一次删除第一位比它后一位要大的数字,保证首位数不能大于后一位,这样才能输出最小的正整数。循环n次删除n位,每一次删除字符长度减一,用strlen()函数记录字符串长度。

代码如下:

 

 

3、题目要求若结果的首位有0,则不输出0,在输出上要做一个判断语句,如果首次输出有0,则直接跳至下一个数字,直到有非零的数字被输出后,则不用再跳过0。

代码如下:

 

 

四、算法时间及空间复杂度分析

此算法实现的时间复杂度为O(n^3)  空间复杂度都为n。

时间复杂度O(n^3):删除的for循环中有两个while循环,输出for循环时间复杂度为O(n)

空间复杂度O(n)。

五、心得体会
1、对于贪心算法,最主要是多次尝试不同方案,找出最贪心的方法以求得最优解。

2、贪心算法相对于前两种算法而言比较符合常规思想,每次都是同一种方案不断循环。

3、虽然贪心算法不一定保证是最优解,但其思路简单,算法省时好用。

 

posted @ 2021-11-12 09:32  柒柒子  阅读(15)  评论(0编辑  收藏  举报