方法1:遍历两遍
从左往右遍历一遍,是跟左边的人比较;
再从右往左遍历一遍,是为了跟右边的人比较。只有两者都满足的时候,才会满意
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int N;
while( cin>>N)
{
vector<int> credit(N,0);
vector<int> money(N,1);
int result=0;
for(int i=0;i<N;i++)
{
cin>>credit[i];
}
for(int j=1;j<N;j++)
{
if(credit[j]>credit[j-1])
money[j]=money[j-1]+1;
else
continue;
}
for(int i=N-2;i>-1;i--)
{
if(credit[i]>credit[i+1])
{
if(money[i]<=money[i+1])
money[i]=money[i+1]+1;
}
else
continue;
}
for(int i=0;i<N;i++)
{
result+=money[i];
}
cout<<result<<endl;
}
return 0;
}
方法2:遍历一遍,且每遍历一位,又要递归回去
#include<iostream>
#include<vector>
#include<math.h>
using namespace std;
int main() {
int n;
while(cin >> n) {
vector<int> credit(n, 0); //存储n个人得分
vector<int> wage(n, 1); //存储n个人奖金, 并且每个人的奖金初始化为 1 万。
for(int i=0; i<n; i++) {
cin >> credit[i];
}
for(int i=1; i<n; i++) {
if(credit[i]>credit[i-1])
wage[i] = wage[i-1] + 1;
else if(credit[i]<credit[i-1]) {
for(int j=i-1; j>-1; j--) {
if(credit[j]>credit[j+1] && wage[j]<=wage[j+1])
wage[j]++;
else
break;
}
}
}
int res=0;
for(int i=0; i<n; i++)
res = res + wage[i];
cout << res << endl;
}
return 0;
}
注意:题目可能会有输入多组数据的情况,此时要用while循环,否则不能通过