一、题目
塔纳终于有了和伦巴那酋长面谈的机会,可是在他前面还有很多各地来的进贡者也需要见酋长,所以塔纳被安排在了一个长长的队伍里面。这个队伍一共有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】
35 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;
}
然后就对了