解题思路:由题意是要我们先输入9个数字,对这九个数字排好序后再输入一个值并在排好的序列中找到一个恰当的位置插入使之继续有序;题目最后输出的格式要求既可以是每个数值隔行输出,也可以输出在一行。
输入前9个数据并对其排序在此不做赘述,直接梳理往已排好序的序列中插入一个值再排序的思路
语句:
for(i=0;i<9;i++)
{
if(n<matr[i])
break;
} /*该循环的作用是:找到插入的位置i。n依次比较各个元素,如果n小于matr[i]中某的一个值,说明n要插到这个值的前面,即跳出循环执行下面的语句将n插到合适的位置;如果n大于matr[i],就说明n只能插到matr[i]的最后面*/
for(j=8;j>=i;j--)
matr[j+1]=matr[j]; /*如果n小于matr[i]中某的一个值,说明n要插到这个值的前面,同时matr[i]后面的元素依次后移一位,注意此时j=i,所以mart[i]位已经是空位*/
matr[i]=n; /*最后将n赋值给mart[i]*/
注意事项:
参考代码:
#include<stdio.h>
int main()
{
int i,j,k,t,n,matr[100];
for(i=0;i<9;i++)
scanf("%d",&matr[i]);
for(i=0;i<8;i+=1)
{
k=i;
for(j=i+1;j<9;j++)
{
if(matr[k]>matr[j])
k=j;
}
if(i!=k)
{
t=matr[i];
matr[i]=matr[k];
matr[k]=t;
}
}
scanf("%d",&n);
for(i=0;i<9;i++)
{
if(n<matr[i])
{
break;
}
}
for(j=8;j>=i;j--)
matr[j+1]=matr[j];
matr[i]=n;
for(i=0;i<10;i++)
printf("%d\n",matr[i]);
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复