C++-------塔纳的队列(未经过作者允许禁止转载!!!)

一、题目

    塔纳终于有了和伦巴那酋长面谈的机会,可是在他前面还有很多各地来的进贡者也需要见酋长,所以塔纳被安排在了一个长长的队伍里面。这个队伍一共有n个人,人们等得很无聊,于是他们开始望来望去,想在队伍里寻找自己的族人。
    队列中任意两个人A和B,如果他们是相邻或他们之间没有人比A或B高,那么他们是可以互相看得见的。
    塔纳想计算出有多少对人可以互相看见,那么你能帮帮塔纳吗?
【输入数据】
    第一行包含一个整数n (1 ≤n≤ 10000),表示队伍中共有n个人;
    第二行包含n个正整数,第i个正整数表示队伍中第i个人的高度。
    (1 ≤高度≤10000)
【输出数据】
    输出仅有一行,包含一个数s,表示队伍中共有s对人可以互相看见。
【输入样例1】
7
2 4 1 2 2 5 1
【输出样例1】
10    

【输入样例2】
3

5 4 3
【输出样例2】
2

二、找规律

以上面的样例为例

输入7不多说了表示输入7个数字

然后根据题目意思观察样例每一个数字的后面如果比前面大,那么成一组所以可以这样写

#include <iostream>//头文件

using namespace std;

int main()

{

    int i, n, a[1000], sum = 0, j, flag = 0;

    cin >> n;

    for (i = 0; i < n; i++)//输入n个数

    {

        cin >> a[i];

    }

    for (i = 0; i < n; i++)

    {

        for (j = i + 1; j < n; j++)

        {

            if (a[i] < a[j])判断是否小于后面的数,小于的话段数+1退出这层循环

            {

                sum++;

                break;

            }

            else//否则

            {

                sum++;

            }

        }

    }

    cout << sum;输出

    system("pause");

    return 0;

}

结果

所以我们发现

3

5 4 3

最后3和5组成一对,4却把三挡住了所以

三、“改”

#include <iostream>//头文件

using namespace std;

int main()

{

    int i, n, a[1000], sum = 0, j, flag = 0;

    cin >> n;

    for (i = 0; i < n; i++)//输入n个数

    {

        cin >> a[i];

    }

    for (i = 0; i < n; i++)

    {

        for (j = i + 1; j < n; j++)

        {

            if (a[i] < a[j])//判断是否小于后面的数,小于的话段数+1退出这层循环

            {

                sum++;

                break;

            }

            if (a[j] >= a[i + 1])//判断后面的数是否大于前面的数

            {

                sum++;

            }

        }

    }

    cout << sum;

    system("pause");

    return 0;

}

然后就对了

谢幕

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值