题目描述:
给定有序数组(从小到大),再给你一个数,要求插入该数到数组中并保持顺序
输入:
多组测试,每组第一行输入一个整数n,然后是n个有序的整数 第二行输入1个整数m和1个整数K
输出:
将整数m插入到原数组中保持顺序是升序,然后输出2行 第一行是插入以后的数组 第二行是插入以后的数组中下标值是K的数 n m k不超过20
#include<stdio.h>
#include<math.h>
int main()
{
int n,i,j,a[20],min=0,k;
int t=0;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++){
scanf("%d",&a[i]);}
int m,k;
scanf("%d%d",&m,&k);
for(j=0;j<n-1;j++){ //冒泡法排序
for(i=0;i<n-1-j;i++){
if(a[i+1]<a[i]) {
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
}
for(i=0;i<n;i++) { //插入m
if(a[i]>m){
k=i;
for(i=n-1;i<=k;i--){
a[i+1]=a[i];
a[k]=m;
}
}
}
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("%d\n",a[n]);
printf("%d\n",a[k]);
}
return 0;
}
根据 给定有序数组(从小到大) n m k不超过20
你直接定义数组 a[20]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
#include<stdio.h>
#include<math.h>
int main()
{
int n,i,j, min=0,k;
int t=0;
int a[21]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21};//多开一个空间来存放插入的数
do{
printf("请输入一个整数n(不超过20):");
scanf("%d",&n);
}while(n<=20);
do{
printf("请输入1个整数m和1个整数K(不超过20):");
scanf("%d%d",&m,&k);
}while(m<=20&&k<=20);
for(i=0;i<n;i++){
if(a[i]>m){//找到比输入的m还要大的位置
break;
}
}
for(j=19;j>=i;j--){ //后面的数据后移
a[j+1]=a[j];
}
a[i]=m;//后移动之后i的位置就放入m
for(i=0;i<n;i++)
printf("%d ",a[i]); //输出第一行是插入以后的数组
printf("\n%d ",a[k]);//输出第二行是插入以后的数组中下标值是K的数
}
return 0;
}
30行a[k]=m;应该在循环外把