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

首先是输入只含有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
采用与数组内部数据一一比较,将较大的数替换输入的数据,然后以此类推,最大的数复制给数组最后一位,最后进行输出。
#include<stdio.h>
int main()
{
	int N[10],i,t,a;
	for(i=0;i<9;i++)
	{
		scanf("%d",&N[i]);
	}
	scanf("%d",&t);
	for(i=0;i<9;i++)
	{
		if(t>N[i])
		{
			continue;
		}
		else
		{
			a=N[i];
			N[i]=t;
			t=a;
		}
	}
	N[9]=t;
	for(i=0;i<10;i++)
	{
		printf("%d\n",N[i]);
	}
	return 0;
 }
龙Time 2年前 回复TA
#include<stdio.h>
int main()
{
    int a[9],b,c;
    for(b=0;b<9;b++)
    { scanf("%d ",&a[b]);}
    scanf("%d",&c);
    for(b=0;b<9;b++){
        if(b==0&&c<a[b]){
            printf("%d\n",c);
            while(b<9)
            {printf("%d\n",a[b]);
                b++;}
            break;}
        else if(b==8&&c>a[b])
       {printf("%d\n",c);printf("%d\n",a[b]);break;}
        else{
            if(c<a[b])
            {printf("%d\n",c);
                while(b<9){
                printf("%d\n",a[b]);
                    b++;}
                break;}
            printf("%d\n",a[b]);}}
}
Eionky 2年前 回复TA
@你怎么连话都说不清楚 如果要插入的值比已经排好的值都大或者都小,就不会输出任何内容
jxnbhckmshckabckmsbfkdnfjzghsbfkdudn 2年前 回复TA
@wydasd 我错了,没有赋值的t,默认为0。你是对的。
jxnbhckmshckabckmsbfkdnfjzghsbfkdudn 2年前 回复TA
@wydasd 一开始定义的时候,直接把t定义为0,就考虑到了,比所有元素都小的情况;在写一个else if分支就可以解决比所有元素都大的情况了。
wydasd 2年前 回复TA
答主没有考虑到插入的数比所有的数都大的情况
吴昵称 2年前 回复TA
@INT橙 大神,我的这个为啥不对#include <stdio.h>  int main() { 	int a[10], i = 0; 	for (i = 0; i < 9; i++) { 		scanf("%d", &a[i]); 	} 	int n; 	scanf("%d", &n); 	while (n > a[i]) 		i++; 		for (int j = 0; j < i; j++) { 			printf("%d ", a[j]); 		} 	printf("%d ", n); 	for (int j = i; j < 9; j++) { 		printf("%d ", a[j]); 	} 	printf(""); }
INT橙 2年前 回复TA
#include<stdio.h>
int main()
{
   int a[10],i,j,t,min;
   //printf("请输入9个正序排列的整数\n");
   for(i=0;i<9;i++)
   {
       scanf("%d",&a[i]);
   }
   //printf("请输入1个整数\n");
   for(i=9;i<10;i++)
   {
   scanf("%d",&a[i]);
   }
   for(i=0;i<10;i++)
   {
       min=a[i];
       for(j=i+1;j<10;j++)
       {
           if(a[j]<min)
           {
               t=min;
               min=a[j];
               a[j]=t;
           }
       }
       printf("%d\n",min);
   }
    return 0;
}
快快花落了 3年前 回复TA
我写的,改了几次,现在好了
#include <stdio.h>

int main() {
	int a[10], i, b, k, j;
	for (i = 0; i < 9; i++)
		scanf("%d", &a[i]);
	scanf("%d", &b);
	for (i = 0; i < 9; i++)
		if (b > a[i] && b < a[i + 1]) {
			k = i + 1;
			break;
		}

	for (j = 9; i < j; j--)
		a[j] = a[j - 1];
	a[k] = b;
	for (i = 0; i < 10; i++)
		printf("%d\n", a[i]);
	return 0;
}
莉海 3年前 回复TA
怎么说呢,(题目也没说清楚),如果插入的数比所有数都大,即插入到a[10](或者插入的数比所有数都小,即应插入到a[0]),则这串代码不可以,没有包括所有可能。
#include<stdio.h>
int main()
{
	int a[10],n,i,t,j=0;
	for(i=0;i<9;i++)
	{
		scanf("%d",&a[i]);
	}
	scanf("%d",&n);
	if(n<a[0])
	{
		j=0;
	}else
	{
		for(i=0;i<9;i++)
		{
			if(n>a[i]&&n<a[i+1])
			{
				break;
			}
		}
		j=i+1;
	}
	if(j==10)
		j=9;
	for(i=9;i>j;i--)
	{
		a[i]=a[i-1];
	}
	a[j]=n;
	for(i=0;i<10;i++)
	{
		printf("%d\n",a[i]);
	}
}(代码较长,因为是初学,勿喷,谢谢)