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

首先是输入只含有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 条评论

萌萌的萌新 2年前 回复TA
@萌萌的萌新 有点胡言乱语,菜鸡整了一个钟头
萌萌的萌新 2年前 回复TA
@萌萌的萌新 就是先按从小到大输入九个数组,另一个要插入的是x,然后a[8]这个九个数里面最大的直接赋给a[9],然后x不断和数组判断,要求大于前一个小于后一个找到那个位置。这时候又是一个循环,a[7]赋给a[8]],a[6]赋给a[7]...最后把插入的x赋给a[i],再最好打印a[9],十个数全打印出来
萌萌的萌新 2年前 回复TA
思路很乱但终于整出来了
#include<stdio.h>
int main()
{
	int arr[9];
	int i = 0;
	int x = 0;
	while (i < 9)
	{
		scanf("%d", &arr[i]);
		i++;
	}
	arr[9] = arr[8];
	scanf("%d", &x);
	for (i=1;i<9;i++)
	{
		if (x < arr[i]&&x>arr[i-1])
		{
			int h = 8;
			while (h > i)
			{
				arr[h] = arr[h - 1];
				h--;
			}
			arr[i] = x;
		}
	}
	for (i = 0; i < 10; i++)
	{
		printf("%d\n", arr[i]);
	}
	return 0;
}
一梦浮生 2年前 回复TA
#include<stdio.h>
int main()
{
    int a[9];
    for(int x=0;x<9;++x)
    {
        scanf("%d",&a[x]);
    }
    int b[10];
    for(int s=0;s<9;++s)
        {
            b[s]=a[s];
        }
    scanf("%d",&b[9]);
    for(int j=1;j<10;++j)
    {
        for(int i=0;i<10-j;++i)
        {
            if(b[i]>b[i+1])
            {
                int t=b[i];
                b[i]=b[i+1];
                b[i+1]=t;
            }
        }

    }
    for(int y=0;y<10;y++)
    {
        printf("%d\n",b[y]);
    }
    return 0;
}
yy 2年前 回复TA
#include<stdio.h>
int main()
{
    int n;
    int array[10];
    for(int i=0;i<9;i++)
    {
        scanf("%d",&array[i]);
    }
    scanf("%d",&n);
    for(int i=0;i<9;i++)
    {
        if(array[i]>n)
        {
            for(int j=9;j>i;j--)
            {
                array[j]=array[j-1];
            }
            array[i]=array[i+1];
            array[i]=n;
            break;
        }
    }
    for(int i=0;i<10;i++)
    {
        printf("%d\n",array[i]);
    }
}
1111Jane 2年前 回复TA
先给n找到合适的位置放入,依次遍历,把最大的值留给n,最后再把n放在数组末尾
#include<stdio.h>
int main()
{
    int a[10],i,n,tmp;
    for(i=0;i<9;i++){
    	scanf("%d",&a[i]);
	}
	//printf("\n");
	scanf("%d",&n);
	for(i=0;i<9;i++){
		if(n<a[i]){//n是小数,把a[i]换成n 
			tmp=a[i];//把n放置进去了 
			a[i]=n;
			n=tmp;
			}
		}//n变为最大数 ,但n此时还在数组之外 
		a[9]=n;//第十个数字n赋值进去 
		for(i=0;i<10;i++){
		  printf("%d\n",a[i]);
	}
    return 0;
}
洛顾劢 2年前 回复TA
@小歪歪 为什么后面只能是i--,我用i++就是错的,一直搞不明白
Joker 2年前 回复TA
@wydasd @uq_33512450683 新建原数组长度+1的数组,找到位置插入后将后面所有位置后挪一位更简洁
Joker 2年前 回复TA
@uq_20099990464 你这只是为了打印
Joker 2年前 回复TA
@追梦人 a[i-1] ,当i=0时出错