博客
关于我
导弹打飞机问题(贪心算法)
阅读量:502 次
发布时间:2019-03-07

本文共 1246 字,大约阅读时间需要 4 分钟。

导弹打飞机问题

问题描述

某国为了防御敌国的飞机的空中袭击,在较短的时间内研发出一套防空导弹系统,这套导弹系统的工作原理是,它有一套配套的雷达系统,该雷达系统可以检测飞来的飞机的高度,但是由于研制的时间短,这套导弹系统存在一定的BUG,就是当一个导弹打击的飞机高度,是递减的,比如说第一个打击的飞机高度是一万米,那么它打击的第二架飞机的高度,是递减的,比如说9千米,第三架的高度更低,比如说八千,打击飞机的高度一样没关系,但是不能升高了,打击飞机的高度,只能越打越低,然后假设飞机飞来的高度,我们已经知道了,假设飞机已经飞来,都飞在固定高度,高度一动不动的向前飞来。

输入飞机依次飞来的高度。计算要拦截所有飞机最小需要配备多少套这种防空导弹系统。

输入

n架飞机飞来的高度。

输出

要拦截所有飞机所需最小配备的系统数k。

输入样例

6 4 2 8 5 7 9 1 3

输出样例

4

提示

输入:请输入飞机的个数:n

请输入每个飞机的高度

输出:最少需要启动的系统数为k

完整代码:

#include "stdafx.h"#include 
int main(int argc, char* argv[]){ int i,j,n,k,x; int a[1000];//存储每个飞机的高度 int b[1000];//存储每个系统当前能打到的最低高度,数组下标代表系统编号 printf("请输入飞机的个数:\n"); scanf("%d",&n); printf("请输入每个飞机的高度:\n"); for(i=1;i<=n;i++){ scanf("%d",&a[i]); } k=1;//初始化第一个系统b[1]=a[1];//将第一个飞机的高度作为第一个系统能打到的最低高度放入数组 for(i=2;i<=n;i++){ //将后续的飞机高度依次取出 x=0; for(j=1;j<=k;j++){ //将飞机高度与每个系统的最低高度比较 if(a[i]<=b[j]){ //找到最低高度比飞机高度大的系统 if(x==0){ x=j;//标记第一个最低高度比该飞机高度大的系统的编号 } else if(b[x]>b[j]){ //贪心选择,将之后找到的系统与标记的系统比较,如果比之前的小则替换之前的 x=j;//记录最合适的系统的编号 } } } if(x==0){ //没找到 k++;//新建一个系统 b[k]=a[i]; //将该高度作为新系统的最低高度存入数组 } else{ //更新最合适的系统的最低高度 b[x]=a[i]; } } printf("最少需要启动的系统数为:\n "); printf("%d\n",k); return 0;}

运行结果如下:

在这里插入图片描述

转载地址:http://opjcz.baihongyu.com/

你可能感兴趣的文章
Mysql学习总结(36)——Mysql查询优化
查看>>
Mysql学习总结(37)——Mysql Limit 分页查询优化
查看>>
Mysql学习总结(38)——21条MySql性能优化经验
查看>>
Mysql学习总结(39)——49条MySql语句优化技巧
查看>>
Mysql学习总结(3)——MySql语句大全:创建、授权、查询、修改等
查看>>
Mysql学习总结(40)——MySql之Select用法汇总
查看>>
Mysql学习总结(41)——MySql数据库基本语句再体会
查看>>
Mysql学习总结(42)——MySql常用脚本大全
查看>>
Mysql学习总结(43)——MySQL主从复制详细配置
查看>>
Mysql学习总结(44)——Linux下如何实现mysql数据库每天自动备份定时备份
查看>>
Mysql学习总结(45)——Mysql视图和事务
查看>>
Mysql学习总结(46)——8种常被忽视的SQL错误用法
查看>>
Mysql学习总结(48)——MySql的日志与备份还原
查看>>
Mysql学习总结(49)——从开发规范、选型、拆分到减压
查看>>
Mysql学习总结(4)——MySql基础知识、存储引擎与常用数据类型
查看>>
Mysql学习总结(50)——Oracle,mysql和SQL Server的区别
查看>>
Mysql学习总结(51)——Linux主机Mysql数据库自动备份
查看>>
Mysql学习总结(52)——最全面的MySQL 索引详解
查看>>
Mysql学习总结(53)——使用MySql开发的Java开发者规范
查看>>
Mysql学习总结(54)——MySQL 集群常用的几种高可用架构方案
查看>>