解题思路:这是常规思路,类似按身高排队一样,已经排好的队,你想插进去,找到比你矮的和比你高的前后两个人,之后的人往后退一步就行了。

首先是输入只含有9个元素的数组a[10],用for循环依次输入。接着输入插入的数字x,将x与数组元素比较,当a[i]<=x<=a[i+1]时,记录x应该插入的位置t=i+1。但是插入x之前要把元素往后移位,从后往前直到位置t,最后把x赋值给a[t],输出排好的a[10]。

注意事项:注意移位从后往前,不然从前往后会使数据丢失。找插入位置时注意break退出遍历循环,不然肯定是最后面。

参考代码:

#include <stdio.h>

int main()
{
    int a[10];
	int i=0;
	int t;
	for(i=0;i<9;i++)
	{
		scanf("%d",&a[i]);
	}
	a[9]=0;
	int x;
	scanf("%d",&x);
	for (i=0;i<10;i++)
	{
		if(x>=a[i] && x<=a[i+1])
		{
			t=i+1;
			break;
		}
	}
//	printf("%d\n",t);
	for (i=9;i>t;i--)
	{
		a[i]=a[i-1];
	}
	a[t]=x;

	for (i=0;i<10;i++)
	{
		printf("%d\n",a[i]);
	}
    return 0;
}


点赞(0)
 

0.0分

101 人评分

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

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

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

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

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

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

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

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

评论列表 共有 66 条评论

诺坎普北看台 3年前 回复TA
#include<stdio.h>
int main(){
	int a[10],i,x,y,j;
	for(i=0;i<9;i++){
		scanf("%d",&x);
		a[i]=x;
	}
	scanf("%d",&y);
	a[9]=y;
	int change;
	change=a[9];
	for(j=8;j>=0&&change<a[j];i--)
	a[j+1]=a[j];
	a[j+1]=change;
	for(i=0;i<9;i++)
	printf("%d\n",a[i]);
	return 0;
}
哪里出问题了呀,求解
小龙老师 3年前 回复TA
@3120000893 程序没有考虑到输入的数值比第一个还要小,所以需要补充另外一种可能。
3120000893 3年前 回复TA
为什么你这 123456789  0  的时候不行  感觉有问题
迷失的小熊 3年前 回复TA
@迷失的小熊 参考上一位大佬(柯南的滑板)修改的代码
迷失的小熊 3年前 回复TA
#include <stdio.h>
 int main()
{
    int a[10];
    int i=0;
    int t;
	int x;
    for(i=0;i<9;i++)
    {
        scanf("%d",&a[i]);
    }
    a[9]=0;
	//插入的数
    scanf("%d",&x);
    for (i=0;i<9;i++)//前面或者中间插入
    {
        if(x>=a[i]&&x<=a[i+1])
        {
            t=i+1;
            break;
        }
    }
	if(i==9)//插入到末端
			t=9;
	if(i<9)
	{
		for (i=9;i>t;i--)
		{
			a[i]=a[i-1];
		}
		a[t]=x;
	}
	else
		a[9]=x;
    for (i=0;i<10;i++)
    {
        printf("%d\n",a[i]);
    }
    return 0;
}
柯南的滑板 3年前 回复TA
不足之处请大家批评指正!