柯南的滑板


私信TA

用户名:uq_45459957643

访问量:26975

签 名:

hello world

等  级
排  名 568
经  验 4163
参赛次数 0
文章发表 7
年  龄 18
在职情况 学生
学  校 河北工业大学
专  业

  自我简介:

;

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

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

146 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区

#include<stdio.h>
int main(){
	int a[10];
	int i;
	int n=sizeof(a)/sizeof(a[0]) ;
	for(int i=0;i<9;i++){
		scanf("%d",&a[i]);
		
	}
	int x;

	scanf("%d",&x);
	for(;x>a[i]&&i!=n;i++)
	{
		printf("%d\n",a[i]);
	}
	printf("%d\n",x);
	for(;x<a[i];i++){
		printf("%d\n",a[i]);
		
	}
	return 0;
}
答案没问题啊,为什么总说我答案错误
2021-11-28 11:15:26
#include<stdio.h>
int main()
{
	int a[9],b[10],i,j,temp=0;	
	printf("请输入9个整数:\n");
	for(i=0;i<9;i++)
		scanf("%d",&a[i]);			
	for(j=9;j>0;j--)
	{
		for(i=0;i<9;i++)
		{
			if(a[i]>a[i+1])
			{
				temp=a[i];
				a[i]=a[i+1];
				a[i+1]=temp;
			}		
		}		
	}		
	for(i=0;i<9;i++)
		printf("%d  ",a[i]);			
	printf("\n");	
	printf("请输入要插入的整数:\n");
	scanf("%d",&b[9]);	
	for(i=0;i<9;i++)
		b[i]=a[i];		
	for(j=10;j>0;j--)
	{
		for(i=0;i<10;i++)
		{
			if(b[i]>b[i+1])
			{
				temp=b[i];
				b[i]=b[i+1];
				b[i+1]=temp;
			}		
		}		
	}		
	for(i=0;i<10;i++)
		printf("%d  ",b[i]);			
	return 0;
}
2021-11-23 18:36:58
这个有问题吧,如果你由大到小的输入数字,它就会报错,例如:
66 55 54 53 52 51 49 48 46
50
我觉得这个可以参考一下1023题,如果是上述情况的话只用反向输出排好的数就行了。
2021-11-10 15:47:41
#include<stdio.h>
#include<string.h>
int main()
{
	int a[10];
	int i,m=0,t;
	for(i=0;i<9;i++)
	{scanf("%d",&a[i]);
	}
	getchar();
	scanf("%d",&a[9]);
	for(i=0;i<9;i++)
	{
		if(a[9]>a[i])
		{
			if(a[9]<a[i+1])
			{
				t=a[9];
				for(m=9;m<=i+1;m--)
					a[m]=a[m-1];
				a[i+1]=t;
			}
		}
	}
	for(i=0;i<10;i++)
		printf("%d\n",a[i]);
}
输出结果不对·,循环不知道哪出问题了,请求大佬
2021-10-16 23:55:12
#include <stdio.h>
#include <malloc.h>
int main()
{
	int len, i, add, e, j, t;
	len=9;
	int *p = (int*)malloc(sizeof(int) * len);

	for(i=0; i<len; ++i)
		scanf("%d", &p[i]);
	printf("\n");

	scanf("%d", &e);
	j=0;					//给插入的元素选位置 
	while(e>p[j])
	{
		j++;
	}	
	add=1;
	len+=add;				//数组长度改变

	p=realloc(p, (sizeof(int)*len));		//重新分配动态内存 
	t=len;
	while(t>5)				//插入点后面的元素顺序后移
	{
		p[t]=p[t-1];
		t--;
	}
	p[j]=e;					//将新插入的元素放入数组队列
	for(i=0; i<len; ++i)
		printf("%d\n", p[i]);	 
	return 0;
}
请教各位大佬,动态构造数组的方法是不是用的不对?
2021-10-12 11:01:50
#include <stdio.h>
int main()
{
	int a[10];int i =0;int x;int t; 
    a[9] = 0;
	for(i=0;i<9;i++){
     scanf("%d",&a[i]);
	} scanf("%d",&x);
	for(i=0;i<9;i++){
	 if(x>a[i-1]&&x<a[i]){ t = i;break;
	 } 
	} 
	for(i=8;i>t;i--){ a[i+1]=a[i];
	} a[t] = x;
	for(i=0;i<10;i++){ printf("%d ",a[i]);
	}return 0;
 }  有没有大哥帮我看一下我这样写是哪一步出了问题
2021-10-06 12:48:21
#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);
	//最前面
	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=0;i<10;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;
}
2021-07-29 11:23:40
#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;
}
哪里出问题了呀,求解
2021-07-13 14:52:30