2020-03-03

P1044 拦截导弹问题
描述
某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统,但是这种拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭,由于该系统还在试用阶段。所以一套系统有可能不能拦截所有的导弹。

输入导弹依次飞来的高度(雷达给出的高度不大于30000的正整数)。计算要拦截所有导弹最小需要配备多少套这种导弹拦截系统。

格式
输入格式
n颗依次飞来的高度(1≤n≤1000)。
输出格式
要拦截所有导弹最小配备的系统数k。
样例
输入样例
389 207 155 300 299 170 158 65
输出样例
2
//*导弹拦截问题 在没有给数组长度时利用c=getchar()!=’\n’ (对于vscode)
//todo 虽然顺序固定了,但是炮是可以继续去搞的
//todo 不对时,检查有没有码错,再检查思路是不是不对
//*其实就是检查有多少个子序列是单调递减

在这里插入代码片
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
//*导弹拦截问题          在没有给数组长度时利用c=getchar()!='\n
'//todo 虽然顺序固定了,但是炮是可以继续去搞的
//todo 不对时,检查有没有码错,再检查思路是不是不对
//*其实就是检查有多少个子序列是单调递减i
nt a[1010];
int main()
{    int i, j, n;    n = 0;    /*int temp;    char c;    c = 'a';    while (c != '\n')    {        cin >> temp;        a[n++] = temp;        c = getchar();    }*/    while (cin >> a[n]) //! 在湘潭的oj上面要这样输入才对    {        n++;    }    int ans = 0;    int mp;    //*思路:每次有一组降序就支为0    for (j = 0; j < n; j++) //*从第一个开始向后面找,但是必须是非0的数,当然一开始肯定都不为0    {        if (a[j] != 0)        {            mp = j; //*取一个临时变量            for (i = j + 1; i < n; i++)            {                if (a[i] <= a[mp] && a[i] != 0) //*若符合降序,不去不为0 ,则将前面的临时变量的值(在前面的,大的)之为0                {                    a[mp] = 0;                    mp = i; //*临时变量为下一个数,继续在后面检查是否还有符合降序的数                }            }            a[mp] = 0; //*不要忘记把这最后一个支为0,否则会干扰其他的降序            ans++;        }    }    printf("%d\n", ans);    return 0;}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值