算法第四章作业
1.你对贪心算法的理解:
贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解,
贪心算法是一种对某些求最优解问题的更简单、更迅速的设计技术。
2.请选择一道作业题目说明你的算法满足贪心选择性质
给定n位正整数a,去掉其中任意k≤n 个数字后,剩下的数字按原次序排列组成一个新 的正整数。对于给定的n位正整数a和正整数 k,设计一个算法找出剩下数字组成的新数最 小的删数方案。
输入格式:
第 1 行是1 个正整数 a。第 2 行是正整数k。
输出格式:
输出最小数。
输入样例:
在这里给出一组输入。例如:
178543
4
输出样例:
在这里给出相应的输出。例如:
13
#include <iostream> #include <algorithm> using namespace std; int main(){ char x[1005]; int a[1005]; int n; int length; char border=x[1005]; cin>>x; cin>>n; for(length=0;x[length]!=border;length++) { a[length]=x[length]-'0'; } int select=length-n; int pos=0; int flag=0; while(select!=0){ int min=9; for(int i=pos;i<length;i++){ if(a[i]<min && i<=length-select){ min=a[i]; pos=i+1; } } select--; if(flag==0 && min!=0) { flag=1; cout<<min; continue; } if(flag!=0) cout<<min; } if(flag==0) cout<<'0'; return 0; }
我对这道题的解法是,每次循环找出规定范围内最小的数,select表示需要从给定的数中挑出几位数,每找出一个最小的数select-1,直到其为0,找到最小的数的下标必须满足 i<=length-select。否则会出现数组循环完毕而select
并没有减到0的情况。
3.请说明在本章学习过程中遇到的问题及结对编程的情况
经过了这么长时间的学习,我对贪心算法的掌握愈发熟练了,在这道题上面我一开始走进了误区,选择了一个更加麻烦的算法,但经过搭档的提醒和解答后,最终将题目解出来了。