先贴问题:

1个n位正整数a,删去其中的k位,得到一个新的正整数b,设计一个贪心算法,对给定的a和k得到最小的b;

一.我的想法:先看例子:a=5476579228;去掉4位,则位数n=10,k=4,要求的最小数字b是n-k=6位的;

1、先找最高位的数,因为是6位数字,所以最高位不可能在后5位上取到(因为数字的相对顺序是不能改变的,假设如果取了后五位中倒数第5位的7,则所求的b就不可能是6位的了,最多也就是4位的79228)理解这点很重要!所以问题变成从第1位到第k+1(n-(n-k-1))取最小值,为什么是k+1,可以自己想一下。在这里就变成了

//79228在斜杠中间选择最小的数字!

2、这样根据序号1,取得最小值4,那么最高位就已经确定了是4;然后6位的数就变为还有5位要确定,同上边的推理过程,/9228中,斜杠之内的数字的最小值,得到是5。3、然后取第三位数字54765//228,第三位取7;547657//28第四位取2;54765792//8,第五位只能是2;第六位就是8;则所得数字就是457228;

4、继续想一个问题如果输入的整数a是3346579228,同样n=10,k=4;会遇到什么样的问题呢?同上边的过程第一步://79228,此时区间内有两个相同的最小值3,该用哪个值呢?很明显应该选取第一个3,why?因为试想如果取第二个则,第二次就只能在4657中选择最小值,而取第一个3,则可以再34657中取得3。

5、这个算法思路大概就是这样的,算法具体该怎么实现呢?首先我们要知道程序体要循环n-k次,因为只有这样我们才能每次循环取出最小的数字;其次就是怎么取区间内的最小值。我这里用的是通过循环遍历整个区间取得最小值,最关键的是确定区间的起始位置,第一次循环的位置最好确定就是1,结束位置就是k+1,第二次循环的起始位置是第一次取出的最小值的坐标值加1,结束位置是k+2;然后继续记录最小值的坐标值,以计算下一次的起始位置。

6、这是我的代码:

#include<iostream>
using namespace std;
int main(){
    int num,k,n=0,a[100],x;
 cin>>num>>k;
 x=num;

//计算length(a);
 while(x>0){
  x=x/10;
  n++;
 }
 a[0]=0;

//将输入的整形数字,存入定义的数组中;
 for(int i=n;i>0;i--)
 {
  int s=num%10;
  a[i]=s;
  num=num/10;
 }
 int j,p=0,minn[n-k+1],min,q;
 minn[0]=0;
 for(int i=1;i<=n-k;i++)//n-k次循环;
 {
  min=a[p+1];

//定义q记录坐标;min[]记录每次所取的最小值
  q=p+1;
     for(j=p+1;j<=k+i;j++){
         if(a[j]<min)
      {
          min=a[j];
          q=j;
         }
     }
     p=q;
     minn[i]=min;
    }
    for(int i=1;i<=n-k;i++){
     cout<<minn[i];
 }
    return 0;
}

算法导论----贪心算法,删除k个数,使剩下的数字最小的更多相关文章

  1. [算法导论]贪心算法(greedy algorithm)

    转载请注明出处:http://www.cnblogs.com/StartoverX/p/4611544.html 贪心算法在每一步都做出当时看起来最佳的选择.也就是说,它总是做出局部最优的选择,寄希望 ...

  2. 数据结构与算法之贪心算法 C++实现

    1.基本思路:从问题的某一个初始解触发逐步逼近给定的目标,以尽可能快的求得更好的解. 当达到算法中某一步不能再继续前进时.就停止算法,给出近似值.也就是说贪心算法并不从总体最优考虑,它所作出的选择仅仅 ...

  3. 《Java算法》贪心算法

    贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解. 贪心算法的经典案例: 跳跃游戏: 给定一个非负整 ...

  4. 算法导论练习6.5-8 k路合并

    题目: 请给出一个时间为O(nlgk).用来将k个已排序链表合并为一个排序链表的算法.此处n为所有输入链表中元素的总数.(提示:用一个最小堆来做k路合并. 看到题目第个想到的是归并排序过程中的归并操作 ...

  5. 算法导论第九章 第K顺序统计量

    1.第K顺序统计量概念 在一个由n个元素组成的集合中,第k个顺序统计量是该集合中第k小的元素.例如,最小值是第1顺序统计量,最大值是第n顺序统计量. 2.求Top K元素与求第K顺序统计量不同 Top ...

  6. 算法9-----输出全排列(递归)---移除K个数,剩下最小数。

    1.题目:给定一个字符串,输出所有的字典序. 如: 输入字符串:'ac',输出:['ac','ca'] 输入字符串:‘abc' ,输出:['abc','acb','bac','bca','cab',' ...

  7. dijkstra算法(贪心算法)——解决最短路径问题

    最短路径 给定一张带权图和其中的一个点(作为源点),求源点到其余顶点的最短路径 基本思想 1)源点u,所有顶点的集合V,集合S(S中存有的顶点,他们到源点的最短路径已经确定,源点u默认在S中),集合V ...

  8. 删除一个数的K位使原数变得最小

    原创 给定一个n位正整数a, 去掉其中k个数字后按原左右次序将组成一个新的正整数.对给定的a, k寻找一种方案,使得剩下的数字组成的新数最小. 提示:应用贪心算法设计求解 操作对象为n位正整数,有可能 ...

  9. 算法练习:寻找最小的k个数

    参考July的文章:http://blog.csdn.net/v_JULY_v/article/details/6370650 寻找最小的k个数题目描述:查找最小的k个元素题目:输入n个整数,输出其中 ...

随机推荐

  1. -bash: /usr/local/bin/react-native: No such file or directory

    执行react-native run-android/run-ios的时候出现 -bash: /usr/local/bin/react-native: No such file or director ...

  2. 输入 cc -c 指令出现问题

    mac 命令行里 编译 链接 出现xcrun: error: active developer path mac cc 编译出现 xcrun: error: active developer path ...

  3. 混合应用中的javascript实践

    混合应用中的javascript实践 混合应用(hybird app) 在几年前便进入大众视野,近来更是越发风生水起,深受人民群众的喜爱. 目录 概念 什么是混合应用 混合方式 交互 方法注入 参数传 ...

  4. eclipse提交subversion+apache的中文路径问题解决过程

    原文链接:http://cavenfeng.iteye.com/blog/1921400 .download & patch: # wget http://webdav.todo.gr.jp/ ...

  5. Gym 100507A About Grisha N. (水题)

    About Grisha N. 题目链接: http://acm.hust.edu.cn/vjudge/contest/126546#problem/A Description Grisha N. t ...

  6. C++ 库研究笔记——通过inline避免hpp 的mutiple definition 错误

    C++用了这么多年,这个却第一次知道,以前没用过hpp 这样: // foo.hpp void foo() { /* body */ } // a.cpp #include "foo.hpp ...

  7. ORA-00257 archiver error的处理

    ORA-00257 archiver error的处理 检查flash recovery area的使用情况 SQL> set linesize 100 SQL> col paramete ...

  8. gerrit的使用笔记

    1.clone的时候一定要同时选择上clone with commit-msg hook和ssh,这样才能使用change id,同时使用ssh push到remote. 2.如果是使用了clone ...

  9. nginx file not found 错误处理小记

    安装完php php-fpm nginx 后访问php出现file not found错误,html就没问题配置文件server 段如下 server { listen 80; server_name ...

  10. 树莓派 MPG视频硬件解码破解 Raspberry Pi Patch for MPEG-2, VC-1 license

    Enable the Pi's hardware decoding of MPEG-2 and VC-1 MPEG2 patents have expired If you have  start.e ...