实验任务
小 M 在放学路上看到一群 DM 排成一行在跳广场舞。他注意到 DM 们并没有按照身高的高矮来排队,这样就造成了部分 DM 有可能看不见右边的所有 DM。(我们约定每个 DM 最远只能看到右边第一个不比自己矮的 DM = = !) 他想知道,每个 DM 能看到几个右边的 DM。
数据输入
输入第一行包括一个正整数 N(0 < N <= 10000 ),表示 DM 人数。接下来 N 个数字 ai,表示每个 DM 的身高。(0 < ai <= 1000 )
数据输出
输出 N 个数表示每个 DM 能看到的右边的 DM 数。
输入示例
5
10
5
3
5
6
输出示例
4 2 1 1 0
解题思路
直接暴力循环就行了 (:з」∠)
参考代码
#include <stdio.h>
#include <string.h>
const int maxn = 10010;
struct DM{
double dm;
int ans;
}s[maxn];
int main()
{
int i,n;
while (~scanf("%d",&n)){
memset(s,0,sizeof(s));
for (i = 1;i <= n;i++)
scanf("%lf",&s[i].dm);
s[n].ans = 0;
for (i = n-1;i > 0;i--){
if (s[i+1].dm >= s[i].dm)
s[i].ans = 1;
else{
for (int j = i+1;j <= n;j++){
s[i].ans ++;
if (s[i].dm <= s[j].dm)
break;
}
}
}
for (i = 1;i <= n;i++)
printf("%d ",s[i].ans);
printf("\n");
}
return 0;
}