你上面提供的代码的问题在于只判断了当前位置前面一个元素是否比当前位置的数小,然后对于每个位置的元素,j的计数没有初始化为0,可以在else分支加个循环判断当前位置之前有多少个元素不大于当前元素即可;
至于正确答案是多少,要看你输入的数据是什么。
修改如下:
#include <stdio.h>
int main(void){
int n,j=0,i,k;
scanf("%d",&n);
int arr[n];
for(i=0;i<n;i++){
scanf("%d",&arr[i]);
j=0;
if(i==0){
printf("0 ");
} else{
for(k=0;k<i;k++){
if(arr[k]<=arr[i]){
j=j+1;
}
}
printf("%d ",j);
}
}
return 0;
}
二重循环遍历数组可以解决。
外重循环遍历数组中的每个数(i)
内重循环遍历当前数左边元素(j),即小于当前数下标的数组元素,然后与当前数做大小比较,如果满足条件累加一存入结果数组,结果数组下标与i一致。