算法第四章作业

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.请说明在本章学习过程中遇到的问题及结对编程的情况

经过了这么长时间的学习,我对贪心算法的掌握愈发熟练了,在这道题上面我一开始走进了误区,选择了一个更加麻烦的算法,但经过搭档的提醒和解答后,最终将题目解出来了。

posted @ 2020-11-14 20:03  软工1902龚俊杰  阅读(81)  评论(0编辑  收藏  举报