已知有一个已经从小到大排好顺序的整数数列,若从键盘任意输入一个整数,编写程序将其插入到数列的适当位置,仍保持数列的递增顺序.(提示信息:如有数列2,6,9,12,23,若从键盘输入10,则输出

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/30 15:14:15
已知有一个已经从小到大排好顺序的整数数列,若从键盘任意输入一个整数,编写程序将其插入到数列的适当位置,仍保持数列的递增顺序.(提示信息:如有数列2,6,9,12,23,若从键盘输入10,则输出

已知有一个已经从小到大排好顺序的整数数列,若从键盘任意输入一个整数,编写程序将其插入到数列的适当位置,仍保持数列的递增顺序.(提示信息:如有数列2,6,9,12,23,若从键盘输入10,则输出
已知有一个已经从小到大排好顺序的整数数列,若从键盘任意输入一个整数,编写程序将其插入到数列的适当位置,仍保持数列的递增顺序.(提示信息:如有数列2,6,9,12,23,若从键盘输入10,则输出数列为:2,6,9,10,12,23).(c语言)

已知有一个已经从小到大排好顺序的整数数列,若从键盘任意输入一个整数,编写程序将其插入到数列的适当位置,仍保持数列的递增顺序.(提示信息:如有数列2,6,9,12,23,若从键盘输入10,则输出

这个很简单:

#include <stdio.h>

// 输入
void input(int a[], int len)
{
    int i = 0;
    while (i < len)
    {
        scanf("%d", &a[i++]);
    }
}

// 输出
void output(int a[], int len)
{
    printf("[ ");
    
    int i = 0;
    while (i < len) printf("%3d ", a[i++]);
    
    printf("]\n");
}

// 排序
void reorder(int a[], int len)
{
    int i, j, index, max;
    for (i = len - 1; i >= 0; i--)
    {
        index   = 0;
        max     = 0;
        for (j = 0; j <= i; j++)
        {
            if (a[j] > max) 
            {
                max = a[j];
                index = j;
            }
        }
        
        a[index] = a[i];
        a[i] = max;
    }
}

// 排序
void inset(int a[], int &len,int x)
{
    int i, j;
a[len]=100000;
for(i=0;i<=len;++i)
{
if(a[i]>x)
break;
}
    for (j=len+1;j>i;j--)
    {
a[j] = a[j-1];
    }
a[i] = x;
len++;
}


int main()
{
    int a[30] = {0};
    int count = 10;
    int x = -1;
    
    printf("Please input %d integers:", count);
    input(a, count);
    
    printf("The numbers you input are:\n");
    reorder(a, count);
    output(a, count);

    printf("Input the number what you want to insert it:\n", x);
scanf("%d",&x);
    inset(a,count,x);
    
    printf("The numbers after you insert are:\n");
    output(a, count);
    printf("\nThanks for your using!\n");
    
    return 0;
}

其实可以补充一下:

#include <stdio.h>

// 输入
void input(int a[], int len)
{
    int i = 0;
    while (i < len)
    {
        scanf("%d", &a[i++]);
    }
}

// 输出
void output(int a[], int len)
{
    printf("[ ");
    
    int i = 0;
    while (i < len) printf("%3d ", a[i++]);
    
    printf("]\n");
}

// 排序
void reorder(int a[], int len)
{
    int i, j, index, max;
    for (i = len - 1; i >= 0; i--)
    {
        index   = 0;
        max     = 0;
        for (j = 0; j <= i; j++)
        {
            if (a[j] > max) 
            {
                max = a[j];
                index = j;
            }
        }
        
        a[index] = a[i];
        a[i] = max;
    }
}

// 折半查找
int search(int a[], int begin, int end, int target)
{
    int left    = begin;
    int right   = end;
    int mid     = (left + right) / 2;
    
    if (left >= right)
        return -1;
    
    if (a[mid] == target)
        return mid;
    else if (a[mid] < target)
        return search(a, mid, right, target);
    else
        return search(a, left, mid, target);
}

// 插入
void insert(int a[], int len, int target)
{
    int i = 0;
    int index = -1;
    
    if (target <= a[0]) index = 0;
    else if (target >= a[len - 1]) index = len;
    else
    {
        for (i = 0; i < len; i++)
        {
            if (a[i] < target && a[i + 1] >= target)
            {
                index = i + 1;
                break;
            }
        }
    }
    
    for (i = len; i > index; i--)
    {
        a[i] = a[i - 1];
    }
    
    a[index] = target;
}

// 删除
void del(int a[], int len, int target)
{
    int index = search(a, 0, len, target);
    
    if (index != -1)
    {
        int i = 0;
        for (i = index; i < len; i++)
        {
            a[i] = a[i + 1];
        }
    }
}

int main()
{
    int a[30] = {0};
    int count = 20;
    int index = -1;
    int x = -1;
    
    printf("Please input %d integers:", count);
    input(a, count);
    
    printf("The numbers you input are:\n");
    output(a, count);
    
    printf("Please input the x you want to insert: x = ");
    scanf("%d", &x);
    
    printf("Firstly, we reorder these numbers...\n");
    reorder(a, 10);
    
    printf("Now we get an array like this:\n");
    output(a, 10);
    
    printf("Search %d in the array...\n", x);
    index = search(a, 0, count, x);
    
    if (index == -1)
    {
        printf("We CAN NOT find %d in the array, so we insert it.\n", x);
        insert(a, count, x);
        count++;
    }
    else
    {
        printf("Wow, we found it, so we delete it...\n");
        del(a, count, x);
        count--;
    }
    
    printf("Now let us check up the content in the array:\n");
    output(a, count);
    
    printf("\nThanks for your using!\n");
    
    return 0;
}

你可以选择上面那个,下面的就当我写给你观摩的,哈哈

已知有一个已经从小到大排好顺序的整数数列,若从键盘任意输入一个整数,编写程序将其插入到数列的适当位置,仍保持数列的递增顺序.(提示信息:如有数列2,6,9,12,23,若从键盘输入10,则输出 个已经排好顺序的数列a[30]插入一个整数 要求按原来的升序排列 C语言实验题 数列有序!描述有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数m,请将该数插入到序列中,并使新的序列仍然有序. 输入输入数据包含多个测试实例,每组数据 杭电ACM 2019 数列有序问题 输出错误Problem Description有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序. Input输入数据包含多 杭电ACM 2019 数列有序 输出错误Problem Description有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序. Input输入数据包含多个测 有n个数,已有小到大的顺序排好,要求输入一个数,将它插入到数列的合适位置,使 nahtk这几个字母已经被打乱,请帮帮忙把它们顺序排好,变成一个完整的单词. 编写一个算法,从小到大依次输出顺序读入的三个整数x,y,z的值. 设计一个java程序,从键盘输入三个整数,按照从小到大的顺序输出 四大洋按从小到大的顺序排是 五个整数a,b,c,d,e,它们两两相加的和按从小到大顺序排分别是183,186,187,190,191,192,193,194,196,X.已知a 高中数学等差数列求和难题1.有两个等差数列2,6,10,···,190及2,8,14,···,200,由这两个等差数列的公共项按从小到大的顺序组成一个新数列,求这个新数列的各项之和.2.已知数列(an)是等差数列 等差数列{an}的首项和公差都是2/3,记{an}前n项和为sn.等比数列为q,记{bn}的前n项为Tn.若将Sn中的整数项按从小到大的顺序构成数列{Cn},求Cn的一个通项公式.希望有过程和思路.还有就是能不能再说 Description 对于一个给定的数列,输出在这个数列里面排第二大的那个数.Input第一行一个整数n,表示数列的长度 第二行有n个整数.Output输出一行,一个整数,表示在这个数列里面排第二大的那个数.S 实验小学举行运动会,全体运动员的编号是从1开始的连续整数,他们按照编号从小到大的顺序成一个方阵,从第一列第一排开始.小亮的编号是30,他排在第6列第3排,运动员共有多少人? 英语 表示“好”的词 按照 程度从小到大排有哪些呢? 有两个等差数列,2,6,10,…,和2,8,14,…,200,由这两个等差数列的公共项按从小到大的顺序组成一个新数列,求这个新数列的各项之和.还有一题是已知an等于1/(n*(n+1))求Sn的公式……第一题通向公式 C/C++ 在已排序好的数列中插入一个数,使数列保持从小到大的顺序.好像不太对诶.