题目来源:https://www.luogu.com.cn/problem/P1428
题目描述:
人比人,气死人;鱼比鱼,难死鱼。小鱼最近参加了一个“比可爱”比赛,比的是每只鱼的可爱程度。参赛的鱼被从左到右排成一排,头都朝向左边,然后每只鱼会得到一个整数数值,表示这只鱼的可爱程度,很显然整数越大,表示这只鱼越可爱,而且任意两只鱼的可爱程度可能一样。由于所有的鱼头都朝向左边,所以每只鱼只能看见在它左边的鱼的可爱程度,它们心里都在计算,在自己的眼力范围内有多少只鱼不如自己可爱呢。请你帮这些可爱但是鱼脑不够用的小鱼们计算一下。
输入格式
第一行输入一个整数 n,表示鱼的数目。
第二行内输入 n 个整数,用空格间隔,依次表示从左到右每只小鱼的可爱程度。
输出格式
行内输出 n个整数,用空格间隔,依次表示每只小鱼眼中有多少只鱼不如自己可爱。
题目分析:
这道题目比较有难度,但是很容易看出来是考查数组的知识点。用输入一个整数来限制数组有效元素的个数。然后输入相关有效元素的数据。要注意的是输出有几只鱼不如自己可爱的时候应该用另一数组储存并输出。同时本题对循环结构掌握要求较高。
源码展示:
#include<stdio.h>
int main()
{
int i;
scanf("%d",&i);
int x[101],y[101];
int s;/*定义计数变量 */
for(s=0;s<i;s++)
{
scanf("%d",&x[s]);
}
int m,n,k=0;/*定义一组用于判断的计数变量*/
for(m=0;m<i;m++)/*进行判断并计数*/
{
for(n=0;n<m;n++)
{
if(x[m]>x[n])
k++;
}
y[m]=k;
k=0;
}
for(m=0;m<i;m++)/*遍历输出结果数组*/
{
printf("%d ",y[m]);
}
return 0;
}
输出结果:
反思:
1.数组如果定义在主函数以内,不会自动清空,也就是说输出下标为0的数组元素会将原来在这个内存位置上的数输出来。
2.如果将数组定义在主函数以外,它会自动帮你清空,所有的位置初始时都是0
3.值得注意的是题目让我们输出的是N个整数,如果从0输到N的话就输出了N+1个整数了
4.更重要的是本题知道了小鱼个数的最大值,数组元素个数只要超过这个最大值即可。而数组的判断和输出可以控制。
5.注意C语言定义数组元素时,不能用变量作下标否则会报错。