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

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

热心的小马哥 7月前 回复TA
这个运行是不是有点问题?我在vs2019都能运行在这上面的编译器却不行。
xiaoLIU 1年前 回复TA
int main()
{
	int sz = 0;
	int a = 0;
	int arr[] = { 1,7 ,8, 17, 23, 24, 59, 62, 101 };
	scanf("%d", &a);
	sz = sizeof(arr) / sizeof(arr[0]);
	for (int i = 0; i < sz; i++)
	{
		if (a < arr[i+1]&&a>arr[i])
		{
			printf("%d\n", arr[i]);
			printf("%d\n", a);
			continue;
		}
		printf("%d\n", arr[i]);
	}
	return 0;
}
xiaoLIU 1年前 回复TA
@uq_62649998794 为啥不对
xiaoLIU 1年前 回复TA
@uq_62649998794 int main() { 	int sz = 0; 	int a = 0; 	int arr[] = { 1,7 ,8, 17, 23, 24, 59, 62, 101 }; 	scanf("%d", &a); 	sz = sizeof(arr) / sizeof(arr[0]); 	for (int i = 0; i < sz; i++) 	{ 		if (a < arr[i+1]&&a>arr[i]) 		{ 			printf("%d
", arr[i]); 			printf("%d
", a); 			continue; 		} 		printf("%d
", arr[i]); 	} 	return 0; }
uq_62649998794 1年前 回复TA
我自己做的倒序,乱序都能用
#include<stdio.h>

int main()
{
	int n[10],i;
	int tmp=0,z=0,x=0,g=0;
	for(i=0;i<9;i++)
	{
		scanf("%d",&n[i]);
	}
	scanf("%d",&n[9]);
	for(z=0;z<=9;z++)
	{
		for(x=0;x<=9;x++)
		{
		if(n[x]>n[x+1])
		{
			tmp=n[x];
			n[x]=n[x+1];
			n[x+1]=tmp;
		}
		}
	}
	if(n[0]<n[9])
	for(g=0;g<10;g++)	
	{printf("%d\n",n[g]);}
	else
	for(g=10;g<0;g--)	
	{printf("%d\n",n[g]);}
	return 0;
}
人去四海 1年前 回复TA
为啥我的错了
#include <iostream>
#include<vector>
using namespace std;

int main()
{
	vector <int> str;
	int number;
	while (1) {
		cin >> number;
		str.push_back(number);
		if (cin.get() == '\n')
			break;
	}
	int len = str.size();
	for (int i = 0; i < len; i++) {
		cout << str[i];
	}
	cout << '\n';
	int m;
	cin >> m;
	str.push_back(m);
	len = str.size();
	for (int i = 0; i < len-1; i++) {
		int n;
		if (str[i] >= m) {
		    n = str[i];
			str[i] = m;
			str[i+1] = n;
		}
	}
	for (int i = 0; i < len; i++) {
		cout << str[i];
	}
	return 0;
}
菜鸟学编程 1年前 回复TA
@jeff if(a[i]>n) 	    { 	        b[i]=n; 	        b[i+1]=a[i]; 	    }当数组a里面的元素>50时数组b都会被复值为50,第一次b[i]为50下一次循环b[i+1]为50
jeff 1年前 回复TA
#include<stdio.h>
int main()
{
	int a[9];
	for(int i=0;i<9;i++)
	{
	    scanf("%d",&a[i]);
	}
	int b[10];
	int n;
	scanf("%d",&n);
	for(int i=0;i<9;i++)
	{
	    if(a[i]<n)
	    {
	        b[i]=a[i];
	    }
	    if(a[i]>n)
	    {
	        b[i]=n;
	        b[i+1]=a[i];
	    }
	}
	for(int i=0;i<10;i++)
	{
	    printf("%d ",b[i]);
	}
	return 0;
}
想请问一下为什么这样子写,插入的50的后面出现了好几个相同的数字50呢?
荆州与你尽失 1年前 回复TA
#include<stdio.h>
int main(){
    int arr[10];
    for (int i = 0; i < 10; i++)
    {
        scanf("%d", &arr[i]);
    }
     for (int i =0;i<10-1;i++){
            for (int j = 0;j<10-i-1;j++){
                if (arr[j+1] < arr[j]){
                    int tmp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = tmp;
                }
            }
        }
        for (int k = 0; k < 10; k++)
        {
            printf("%d ", *(arr + k));
        }
    return 0;
}
你好吖未来 2年前 回复TA
# include <stdio.h>
int main() {
	int i, n, a[9];
	for (i = 0; i < 9; i++) {
		scanf("%d", &a[i]);
	}
	scanf("%d", &n);
	for (i = 0; i < 9; i++) {
		if (a[i] <= n)
			printf("%d\n", a[i]);
		else {
			printf("%d\n", n);
			for (; i < 9; i++)
				printf("%d\n", a[i]);
		}
	}
	return 0;
}