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

首先是输入只含有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 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);
    if(x<=a[0])
    	t=0;
    else if(x>=a[8])
    	t=9;
    else
    {
		for (i=0;i<9;i++)
	    {
	        if(x>=a[i] && x<=a[i+1])
	        {  
	            t=i+1;
	            break;
	        }
	    }
	}
    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;
}
垃圾 2年前 回复TA
@杨欢 为什么是乱码呀,我加了两个判断条件
垃圾 2年前 回复TA
@杨欢 哈哈哈
垃圾 2年前 回复TA
@杨欢 这样可以吗
垃圾 2年前 回复TA
@杨欢 #include <stdio.h> #include <stdlib.h>  int main(void) { 	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; 		} 	} 	if(x<a[0]) 	{ 		for(i=9;i>0;i--) 		{ 			a[i]=a[i-1]; 		} 		a[0]=x; 	}else if(x>a[8]) 	{ 		a[9]=x; 	} 	else { 	for(i=9;i>t;i--) 	{ 		a[i]=a[i-1];  	} 	a[t]=x;} 	for(i=0;i<10;i++) 	{ 		printf("%d
",a[i]); 	}  	  }
杨欢 2年前 回复TA
假如插入的那个数比原始数列的第一个数都要小,或者比第九个数都要大,这两种情况该怎么判断呢?
追梦人 2年前 回复TA
#include<stdio.h>
int main(void)
{
	int a[10],i,j,n;
	for(i=0;i<9;i++)
	scanf("%d",&a[i]);
	scanf("%d",&n);
	for(i=0;i<9;i++)
	{
		if(a[i]>n&&n>=a[i-1])
		j=i;
	}
	for(i=8;i>=j;i--)
	a[i+1]=a[i];
	a[j]=n;
	for(i=0;i<10;i++)
	printf("%d ",a[i]);
	return 0;
}
奋斗的嘉 2年前 回复TA
#include<stdio.h>
#include<math.h>
int main()
{
   int a[10],b;
   int i,j;
   for(i=0;i<9;i++){
   	scanf("%d",a+i);
   }
  scanf("%d",&b);
  if(b<=a[0]){
  	for(i=9;i>=1;i--){
	  	a[i]=a[i-1];
	  }
	  a[0]=b;
  }
  else if(a[0]<b&&b<a[8]){
  	for(i=0;i<=7;i++){
	  	if(a[i]<=b&&b<=a[i+1]){
		  	for(j=8;j>=i+1;j--){
			  	a[j+1]=a[j];
			  }
			  a[i+1]=b;break;
			  
		  }
	  }	
  }
  else {
  	a[8]=b;
  	
  }
  
  for(i=0;i<=9;i++){
  	printf("%d\n",a[i]);
  }
	  
}
wzc2022 2年前 回复TA
@uq_20099990464 #include<stdio.h> int main( ) { 	int a[10],i; 	for(i=0;i<9;i++) 	{ 		scanf("%d",&a[i]);   //先定义10个数组元素  输入前九个 后一个赋为 0;  	} 	a[9]=0; 	int x;//n大于数组第x个元素  	int n; 	scanf("%d",&n); 	for(i=0;i<9;i++) 	{ 		if(x>=a[i]&&x<=a[i+1])  //查询n应该赋予的位置  		int cnt=i+1; 	} 	for(i=9;i>t;i--) 	{ 		a[i]=a[i-1]; 大于n的元素位置向先往后挪一位  	} 	a[t]=x;  //然后对把n赋给应该插入的位置  	for(i=0;i<10;i++) 	printf("%d",&a[i]); 	return 0; }
uq_20099990464 2年前 回复TA
#include<stdio.h>
int main()
{
	int a[12], b;
	scanf("%d %d %d %d %d %d %d %d %d", &a[1], &a[2], &a[3], &a[4], &a[5], &a[6], &a[7], &a[8], &a[9]);
	scanf("%d", &b);
	for (int i = 1;i <= 9;i++)
	{
		printf("%d\n", a[i]);//当未满足插入条件时依次输出值
		if (b >= a[i] && b < a[i + 1])//当满足插入的条件时
		{
			printf("%d\n", b);//输出插入的值
			for (int j = i + 1;j <= 9;j++)//从i+1开始,将插入位置后面的数据输出
			{
				printf("%d\n", a[j]);
			}
			return 0;//结束
		}

	}

	return 0;
}