解题思路: 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分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论