解题思路: 1、先读入十个数,并且排序(为什么不能直接将数组初始化为0?因为不排除这些数据都是小于0的);2、接下来的每个数据都跟数组里边的数据比较,得出大的次数,也就是得到这个数据应该排在第几位;3、将数组后边比这个最新录入的数据小的数都往后挪一位,空出的那个位置给新数据;
注意事项:
参考代码:
#include<stdio.h>
int main()
{
int n ;
int a[11];
scanf("%d",&n);
int i ;
int j ;
//先读入10个数,然后从大到小排序
for( i = 0 ; i < 10 ; i ++)
scanf("%d",&a[i]);
for( i = 0 ; i < 9 ; i ++)
{
for( j = i + 1 ; j < 10 ; j ++)
{
if( a[j] > a[i])
{
a[j] ^= a[i];
a[i] ^= a[j];
a[j] ^= a[i];
}
}
}
n = n - 10 ;
int temp ;
int flag_larger ;
int bigger_cnt ;
while(n--)
{
flag_larger = 0 ;
bigger_cnt = 0 ;
scanf("%d",&temp);
for( i = 0 ; i < 10 ; i ++)
{
if( temp > a[i])
{
flag_larger = 1 ;
bigger_cnt ++ ;
//printf("%d > a[%d]=%d\n",temp,i,a[i]);
}else
{
//printf("%d < a[%d]=%d\n",temp,i,a[i]);
}
}
/*
if( flag_larger )
printf("biger,%d ",bigger_cnt);
else
printf("smaller");*/
if( flag_larger )
{
for( i = 0 ; i < bigger_cnt ; i ++)
{
a[10 - i] = a[9-i] ;
}
a[10-bigger_cnt] = temp ;
/*
for( i = 0 ; i < 10 ; i ++)
printf(" %d ",a[i]);*/
}
}
for( i = 0 ; i < 10 ; i ++)
printf("%d ",a[i]);
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复