首页 > 试题广场 >

有序序列插入一个整数

[编程题]有序序列插入一个整数
  • 热度指数:30287 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
有一个有序数字序列,从小到大排序,将一个新输入的数插入到序列中,保证插入新数后,序列仍然是升序。

输入描述:
第一行输入一个整数N(0≤N≤50)。

第二行输入N个升序排列的整数,输入用空格分隔的N个整数。

第三行输入想要进行插入的一个整数。


输出描述:
输出为一行,N+1个有序排列的整数。
示例1

输入

5
1 6 9 22 30
8

输出

1 6 8 9 22 30
#include <stdio.h>

int main() {

	int n = 0;
	scanf("%d", &n);
	int arr[51] = { 0 };
	for (int i = 0;i < n;i++)
	{
		scanf("%d", arr + i);
	}

	int m = 0;
	scanf("%d", &m);
	int i = 0;
	for (i = n - 1;i >= 0;i--)
	{
		if (m >= arr[i])
		{
			arr[i + 1] = m;
			break;
		}

		else {
			arr[i + 1] = arr[i];
		}

	}
	if (i < 0)
	{
		arr[0] = m;
	}
	for (int j = 0;j < n + 1;j++)
		printf("%d ", arr[j]);

	return 0;
}

发表于 2025-06-19 20:25:41 回复(0)
#include<stdio.h>
void My_scanf(int arr[],int n)
{
   int i = 0;
   for(i=0;i<n-1;i++)
   {
    scanf("%d",&arr[i]);
   }
}

void insert(int arr[],int n)
{
   int i = 0;
   int j = 0;
   for(i=0;i<n-1;i++)
   {
      for(j=i+1;j<n;j++)
      {
        if(arr[i]>=arr[j])
       {
         int temp = 0;
         temp = arr[i];
         arr[i]=arr[j];
         arr[j] = temp;
       }
      }
   }

}
void My_printf(int arr[],int n) 
{
   int i = 0;
   for(i=0;i<n;i++)
   {
     printf("%d ",arr[i]);
   }
}

int main()
{
    int n = 0;
    int k = 0;
    scanf("%d\n",&n);
    n = n + 1;
    int arr[n];
    My_scanf(arr,n);
    scanf("%d",&k);
    arr[n-1]=k;
    insert(arr,n);
    My_printf(arr,n);
    return 0;
}

发表于 2024-12-30 09:32:59 回复(0)
#include <stdio.h>

int main() {
    int N = 0, tem = 0;
    scanf("%d", &N);
    int arr[N + 1];
    for (int i = 0; i < N; i++) {
        scanf("%d", &arr[i]);
    }
    int a = 0;
    scanf("%d", &a);
    arr[N] = a;
    for (int j = 0; j < N; j++) {
        for (int u = 0; u < N - j; u++) {
            if (arr[u] > arr[u + 1]) {
                tem = arr[u];
                arr[u] = arr[u + 1];
                arr[u + 1] = tem;
            }
        }
    }
    for (int i = 0; i <= N; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}
发表于 2024-12-03 20:12:48 回复(0)
#include <stdio.h>
int main(){
    int n=0;
    int temp=0;
    scanf("%d", &n);
    int arr[n+1];
    for(int i=0;i<n;i++){
        scanf("%d", &arr[i]);
    }
    int x=0;
    scanf("%d", &x);
    arr[n]=x;
    for(int q=0;q<n;q++){
       for(int e=n-q-1;e>=0;e--){
         if(arr[q]>arr[n-e]){
            temp=arr[q];
            arr[q]=arr[n-e];
            arr[n-e]=temp;
        }
       }
    }
    for(int w=0;w<n+1;w++){
        printf("%d ", arr[w]);
    }
    return 0;
}
发表于 2024-12-01 17:22:11 回复(0)
#include<stdio.h>
int main() {
int N, i, arr[100];
scanf("%d", &N);
for (i = 0; i < N; i++) {
scanf("%d", &arr[i]);
}
int n;
scanf("%d", &n);
for (i = 0; i < N; i++) {
if(n<arr[i]){ //找到插入位置
for(int j=N;j>i;j--){
arr[j]=arr[j-1]; //通过内层循环,从数组末尾开始将元素依次后移
}
arr[i]=n;//将n插入合适位置
break;//跳出循环
}
}
if(i==N){//在前面的循环中,变量 i 从 0 开始遍历到 N - 1(假设数组长度为 N)。如果循环结束后 i 的值等于 N,说明在整个循环过程中都没有找到新数 n 的合适插入位置。
arr[N]=n;
}
for (i = 0; i <= N; i++) {
printf("%d ", arr[i]);
}
return 0;
}
发表于 2024-10-20 13:32:31 回复(0)
#include <stdio.h>

int main() 
{
    int n,i,j,o;
    int a[50]={0};
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    scanf("%d",&o);
    for(i=0;i<n;i++)
    {
        if((o>=a[i]&&o<a[i+1])||(o>=a[i]&&a[i+1]==0))
        {
            j=i+1;
            break;
        }
        else{
            j=0;
        }
    }
    for(i=0;i<j;i++)
    {
        printf("%d ",a[i]);
    }
    printf("%d ",o);
    for(i=j;i<n;i++)
    {
        printf("%d ",a[i]);
    }
    return 0;
}

发表于 2024-08-28 21:07:04 回复(0)
#include <stdio.h>

int main()
 {
   int n=0;
   scanf("%d",&n);
   int i=0,j=0;
   int arr[51]={0};
   for(i=0;i<=n;++i)
    scanf("%d",arr+i);

for(i=0;i<=n;++i)
{
   if(arr[n]<arr[i])
   {
int jet=arr[i];
arr[i]=arr[n];
arr[n]=jet;

   }
}

 for(i=0;i<=n;++i)
    printf("%d ",arr[i]);


    return 0;
}
发表于 2024-08-27 09:34:19 回复(0)
 #include <stdio.h>
 #include <stdlib.h>

int* insert_arrary(int array[], int len, int num);

int main()
{
    int N = 0;
    scanf("%d", &N);
    int array[N];
    for(int i = 0; i < N; i++)
    {
        scanf("%d", &array[i]);
    }
    int num = 0;
    scanf("%d", &num);
    int* ret = insert_arrary(array, N, num);
    if(ret != NULL)
    {
        for(int j = 0; j <= N; j++)
        {
            printf("%d ", *(ret + j));
        }
        free(ret);
    }
    return 0;
}

int* insert_arrary(int array[], int len, int num)
{
    int* array2 = (int *)malloc((len + 1) * sizeof(int));
    if(array2 == NULL)
    {
        return NULL;
    }
    int i = 0, j = 0;
    int inserted = 0;

    while (i < len) {
        if (!inserted && array[i] > num)
        {
            array2[j++] = num;
            inserted = 1;
        }
        array2[j++] = array[i++];
    }

    if (!inserted)
    {
        array2[j] = num;
    }

    return array2;
}
发表于 2024-08-12 18:00:26 回复(0)
#include <stdio.h>
#include <stdlib.h>

int main() 
{
    int n = 0;
    scanf("%d", &n);
    //申请n+1个空间大小的数组
    int* a = (int*)malloc(sizeof(int) * (n + 1));

    for(int i = 0; i < n; i++)
    {
        scanf("%d", &a[i]);
    }
    //插入的数
    int m;
    scanf("%d", &m);
    int i = 0;
    //找出要在那个位置插入
    for(i = 0; i < n + 1; i++)
    {
        if(m <= a[i])
            break;
    }
    //把这个位置之后的数据往后移一格,n是数组最后一个元素的下标
    int j =0;
    for(j = n; j > i; j--)
    {
        a[j] = a[j - 1];
    }
    //插入m到数组,跳出循环是j == i
    a[j] = m;

    //打印数组
    for(i = 0; i < n + 1; i++)
    {
        printf("%d ", a[i]);
    }

    return 0;
}


发表于 2024-06-23 03:38:27 回复(1)
#include <stdio.h>
int main() {
    int n,i,j,k;
    int arr1[50],arr2[1];
    scanf("%d", &n);
    for(i=0;i<n;i++)
    {
        scanf("%d \n", &arr1[i]);
    }
    scanf("%d", &arr2[k]);
    arr1[n]=arr2[k];//把这个数放入arr1中,然后再进行冒泡排序
    for(i=0;i<n+1;i++)
    {
        int tmp=0;
        for(j=0;j<n+1;j++)
        {
            if(arr1[i]<arr1[j])
            {
                tmp=arr1[i];
                arr1[i]=arr1[j];
                arr1[j]=tmp;
            }
        }      
    }
    for(i=0;i<n+1;i++)
    {
        printf("%d ", arr1[i]);
    }
    return 0;
}
发表于 2024-06-07 15:00:59 回复(0)
#include <stdio.h>

int main() {
    int n = 0, a[51] = { 0 }, cha = 0;
    //个数n
    scanf("%d", &n);

    //输入n个数据
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &a[i]);
    }

    //输入插入数cha
    scanf("%d", &cha);

    //插入
    for (int i = 0; i < n; i++)
    {
        if (cha < a[i])
        {
            //数据往后挪一位
            for (int j = n - 1; j >= i; j--)
            {
                a[j + 1] = a[j];
            }
            a[i] = cha;
            break;
        }
       
        if (cha>a[n-1])
        {
            a[n] = cha;
            break;
        }
    }

    //打印
    for (int i = 0; i < n + 1; i++)
    {
        printf("%d ", a[i]);
    }
    return 0;
}
发表于 2024-05-10 15:35:41 回复(0)
#include <stdio.h>

int main() {
    int n, x, tag=0, y=0;
    scanf("%d", &n);
    int str[n];
    for(int i=0; i<n; i++){
        scanf("%d", &str[i]);
    }
    scanf("%d", &x);

    for(int i=0; i<=n; i++){
        if(tag<n && str[tag]<=x){
            printf("%d ", str[tag]);
            tag++;
        }else if(i==tag && y==0){
            printf("%d ", x);
            y++;
        }else if(tag < n){
            printf("%d ", str[tag]);
            tag++;
        }
    }
    return 0;
}

编辑于 2024-01-30 21:59:19 回复(0)
#include <stdio.h>
int main() {
    int n;
    scanf("%d",&n);
    int arr[n+1];
    for(int i=0;i<n;i++)
    {
        scanf("%d",&arr[i]);
    }
    scanf("%d",&arr[n]);
    for(int a=0;a<n+1;a++)
    {
        for(int b=0;b<n-a;b++)
        {
            if(arr[b]>arr[b+1])
            {
                int tmp=arr[b];
                arr[b]=arr[b+1];
                arr[b+1]=tmp;
            }
        }
    }
    for(int k=0;k<n+1;k++)
    {
        printf("%d ",arr[k]);
    }
    return 0;
}

发表于 2023-12-10 14:24:24 回复(0)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    int n = 0;
    int  arr[100] = { '0' };
    scanf("%d", &n);
    for (int i = 0; i <= n; i++)
    {
        getchar();
        scanf("%d", &arr[i]);
    }
    if (arr[n - 1] > arr[0])
    {
        int b = n;
        for (int i = 0; i < n; i++)
        {
            if (arr[b] < arr[b - 1])
            {
                int tmp = arr[b - 1];
                arr[b - 1] = arr[b];
                arr[b] = tmp;
            }
            b--;
        }
    }
    else
    {
        int b = n;
        for (int i = 0; i < n; i++)
        {
            if (arr[b] > arr[b - 1])
            {
                int tmp = arr[b - 1];
                arr[b - 1] = arr[b];
                arr[b] = tmp;
                b--;
            }
            b--;
        }
    }
    for (int i = 0; i <= n; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}
编辑于 2023-12-10 09:28:41 回复(0)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
//屎山练习
    int c[100];
    scanf("%d", &c[0]);
    for (int i = 0; i < c[0]; i++)
    {
        scanf("%d", &c[i+1]);

    }
    scanf("%d", &c[(c[0] + 1)]);
    for (int i = 0; i < c[0]; i++)
    {
        for (int j = 0; j < c[0]; j++)
        {
            if (c[j + 1] > c[j + 2])
            {
                c[c[0] + 2] = c[j + 1];
                c[j + 1] = c[j + 2];
                c[j + 2] = c[c[0] + 2];
            }
        }
    }
    for (int i = 1; i < c[0] + 2; i++)
        printf("%d ", c[i]);
}
发表于 2023-11-19 21:53:18 回复(0)
#include <stdio.h>

int main()
{
    int n = 0;
    int arr[100];
    int c = 0;
    while(scanf("%d",&n)!=EOF)
    {
        for(int i = 0;i<n;i++)
        {
            scanf("%d",&arr[i]);
        }
        scanf("%d",&arr[n]);
        for(int i = 0;i<n+1;i++)
        {
            for(int j = n;j>i;j--)
            {
                if(arr[i]>arr[j])
                {
                    c = arr[j];
                    arr[j] = arr[i];
                    arr[i] = c;
                }
            }
        }
        for(int i = 0;i<n+1;i++)
        {
            printf("%d ",arr[i]);
        }
    }
    return 0;
}

发表于 2023-11-17 22:30:34 回复(0)
#include <stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    int arr[100];
    int i;
    for(i=0;i<n;i++)
    {
        scanf("%d ",arr+i);
    }
    int k;
    scanf("%d ",&k);
    int flag = 1;
    for(i=0;i<n;i++)
    {
        if(arr[i]<k)
        {
            printf("%d ",arr[i]);
            continue;
        }
        printf("%d ",k);
        flag = 0;
        break;
    }
    for(;i<n;i++)
    {
        printf("%d ",arr[i]);
    }
    if(flag == 1)
    {
        printf("%d ",k);
    }
    return 0;
}

发表于 2023-11-07 10:18:43 回复(0)
#include <stdio.h>

int main()
{
    int a,b,c;
    int k=0;
    int n=0;
    scanf("%d",&a);
    int arr1[a];
    int arr2[a+1];
    for(int i=0;i<a;i++)
    {
        scanf("%d ",&arr1[i]);
    }
    scanf("%d",&c);
    if(c>=arr1[a-1])
    {
        int j=0;
        for(j=0;j<a;j++)
        {
           arr2[j]=arr1[j];
        }
        arr2[a]=c;
       
    }//这一部分用来判断当c要插在最后一个位置时。
    else
    {
        for(k=0;k<a;k++)
    {
        if(arr1[k]>c)
        {
            n=k;
            break;
        }
    }
    for(int i=n;i<a+1;i++)
    {
       arr2[i+1]=arr1[i];
    }
    for(int i=0;i<n;i++)
    {
        arr2[i]=arr1[i];
    }
    arr2[n]=c;
    }
   
    for(int i=0;i<a+1;i++)
    {
        printf("%d ",arr2[i]);
    }
    return 0;
}
发表于 2023-04-09 02:14:11 回复(0)
#include <stdio.h>

int main() {
    int n = 0;
    scanf("%d", &n);
    int arr[n + 1];
    for (int i = 0; i < n + 1; i++) {
        scanf("%d", &arr[i]);
    }
    int temp = arr[n];
    int i, ret;
    for (i = n - 1; arr[i] > temp; i--) {
        arr[i + 1] = arr[i];
    }
    arr[i + 1] = temp;
    for (i = 0; i < n + 1; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

发表于 2023-03-20 19:41:34 回复(0)

问题信息

上传者:牛客309119号
难度:
47条回答 2725浏览

热门推荐

通过挑战的用户

查看代码
有序序列插入一个整数