精华内容
下载资源
问答
  • 2021-12-04 15:56:34

    在一个升序排列的数组中插入一个数 (10 分)

    编写函数fun,在一个已按升序排列的数组中插入一个数,插入后,数组元素仍按升序排列。

    函数接口定义:

    void fun(int a[N],int number);

    其中 a 和 number 都是用户传入的参数。函数在一个已按升序排列的数组 a 中插入一个数 number ,插入后,数组元素仍按升序排列。

    裁判测试程序样例:

    #include <stdio.h>
    #define N 11
    void fun(int a[N],int number);
    int main()
    {
     int i,number,a[N]={1,2,4,6,8,9,12,15,149,156};
     scanf("%d",&number);
     printf("The original array:\n");
     for(i=0;i<N-1;i++)
        printf("%5d",a[i]);
     printf("\n");
     fun(a,number);
        printf("The result array:\n");
      for(i=0;i<N;i++)
         printf("%5d",a[i]);
     printf("\n");
     return 0;
     }

    /* 请在这里填写答案 */

    输入样例:

    6

    输出样例:

    The original array:
        1    2    4    6    8    9   12   15  149  156
    The result array:
        1    2    4    6    6    8    9   12   15  149  156

    这个题我们可以通过遍历先找出第一个比插入的数大的数的下标,然后从下标开始的数都向后移动一位,从最后一个数开始,到下标的数结束,再把插入的数字作为这个下标的数。

    void fun(int a[N],int number){
    	int i,j;
    	for( i=0;i<N;i++){
    		if(number<=a[i]){
    			break;
    		}
    	}
    	for(j=N-2;j>=i;j--){
    		a[j+1]=a[j];
    	}
    	a[i]=number;
    }

    更多相关内容
  • cpp代码-(数组)将两个升序数组合并为一个升序数组
  • C语言 在一个升序排列数组中插入一个

    万次阅读 多人点赞 2020-05-12 03:22:59
    编写函数fun,在一个已按升序排列数组中插入一个数,插入后,数组元素仍按升序排列。 函数接口定义: void fun(int a[N],int number); 其中 a 和 number 都是用户传入的参数。函数在一个已按升序排列数组 a ...

    在一个升序排列的数组中插入一个数 (10分)
    编写函数fun,在一个已按升序排列的数组中插入一个数,插入后,数组元素仍按升序排列。

    函数接口定义:

    void fun(int a[N],int number);
    

    其中 a 和 number 都是用户传入的参数。函数在一个已按升序排列的数组 a 中插入一个数 number ,插入后,数组元素仍按升序排列
    裁判测试程序样例:

    #include <stdio.h>
    #define N 11
    void fun(int a[N], int number);
    int main()
    {
        int i, number, a[N] = {1, 2, 4, 6, 8, 9, 12, 15, 149, 156};
        scanf("%d", &number);
    
        printf("The original array:\n");
    
        for (i = 0; i < N - 1; i++)
            printf("%5d", a[i]);
    
        printf("\n");
    
        fun(a, number);
    
        printf("The result array:\n");
    
        for (i = 0; i < N; i++)
            printf("%5d", a[i]);
    
        printf("\n");
        
        return 0;
    }
    

    输入样例:

    6
    

    输出样例:

    The original array:
        1    2    4    6    8    9   12   15  149  156
    The result array:
        1    2    4    6    6    8    9   12   15  149  156
    

    个人答案如下:

    void fun(int a[N], int number)
    {
        int m;
    
        for (int i = 0; i < N; i++)
        {
            if (a[i] >= number)
            {
                m = i;
                for (int q = (N-1); q > i; q--)
                {
                    a[q] = a[q - 1];
                }
                break;
            }
        }
    
        a[m] = number;
    }
    

    原理:
    如果输入的数number大于arr[i];
    那么从数组arr最后一位arr[N]开始,将arr[N]的值赋给arr[N+1],同时N- -,直到N>i;
    最后将number赋值给arr[i];

    展开全文
  • 升序排序的数组中插入一个元素 用函数编程实现在一个按升序排序的数组中查找x应插入的位置,将x插入数组中,使数组元素仍按升序排列。 提示:插入(Insertion)是数组的基本操作之一。插入法排序算法的关键在于要...

    我先使用了三个函数参数,参数分别为数组a[],数组元素数量number和需要插入的数字n。函数定义为int f(int a[],int number,int n);

    #include <stdio.h>
    int f(int a[],int number,int n);//a[]已按升序排列的数组 number数组元素 n需要插入的 
    int main()
    {
    	int size,i,array[size],x,m;
    	printf("Input array size:\n");
    	scanf("%d",&size);
    	printf("Input array:\n");
    	for(i=0;i<size;i++){
    		scanf("%d",&array[i]);
    	}
    	/*for(m=0;m<size;m++){
    		printf("%4d",array[m]);
    	}*/  //添加第一处循环
    	printf("Input x:\n");
    	scanf("%d",&x);
    	/*for(m=0;m<size;m++){
    		printf("%4d",array[m]);
    	}
    	printf("%d",x);*/  //添加第二处循环
    	f(array,size,x);
    }
    
    int f(int a[],int number,int n)
    {
    	int j,b[number+1],k;
    	for(j=0;j<number;j++){
    		b[j]=a[j];
    		if(n>=a[j]&&n<=a[j+1]){
    			j++;
    			b[j]=n;
    			break;
    		}else if(n>=a[number-1]){
    			b[number+1]=n;
    		}else if(n<=a[0]){
    			b[j]=n;
    			break;
    		}
    	}
    	for(k=j+1;k<number+1;j++,k++){
    		b[k]=a[j];
    	}
    	printf("After insert %d:\n",n);
    	for(k=0;k<number+1;k++){
    		printf("%4d",b[k]);
    	}
    }

    但结果并不正确: 

    调试过程中发现a[number-1]=5,也就是数组中最后一位是5。

     

     

    但应该是6才对,于是我在主函数中添加了循环遍历整个数组,想查出数组元素变化在何处,找出问题所在。

    添加第一处循环:在scanf("%d",&x);之前添加循环遍历数组,输出数组元素,发现在scanf("%d",&x);之前数组array[5]={1,2,3,4,6},正确的。

     添加第二处循环:在scanf("%d%,&x);之后添加循环,遍历整个数组,输出数组元素,发现在scanf("%d",&x);之后数组array[5]={1,2,3,4,5},错误的!!

    既然如此,不会别的,那就把scanf("%d",&x);放在函数里吧。

    #include <stdio.h>
    int f(int a[],int number);//a[]已按升序排列的数组 number数组元素 n需要插入的 
    int main()
    {
    	int size,i,array[size],x,m;
    	printf("Input array size:\n");
    	scanf("%d",&size);
    	printf("Input array:\n");
    	for(i=0;i<size;i++){
    		scanf("%d",&array[i]);
    	}
    	f(array,size);
    }
    
    int f(int a[],int number)
    {
    	int x,j,b[number+1],k;
    	printf("Input x:\n");
    	scanf("%d",&x);
    	for(j=0;j<number;j++){
    		b[j]=a[j];
    		if(x>=a[j]&&x<=a[j+1]){
    			j++;
    			b[j]=x;
    			break;
    		}else if(x>=a[number-1]){
    			b[number+1]=x;
    		}else if(x<=a[0]){
    			b[j]=x;
    			break;
    		}
    	}
    	for(k=j+1;k<number+1;j++,k++){
    		b[k]=a[j];
    	}
    	printf("After insert %d:\n",x);
    	for(k=0;k<number+1;k++){
    		printf("%4d",b[k]);
    	}
    }

    至此此题就算是完成了,也可以不用函数做。之前也写过一道输入一个数插入已知升序数组中

     

     

    /*
    Q458.(10分)实验七、数组实验(一)
    4.
    设数组a的定义如下:int a[20]={2,4,6,8,10,12,14,16};
    已存入数组中的数据值已经按由小到大的顺序存放,
    现从键盘输入一个数据,把它插入到数组中,要求插入新数据以后,数组数据仍然保持有序。请编写一个程序实现上述功能。
    **输入格式要求:"%d" 提示信息:"Enter n:"
    **输出格式要求:"%d "
    程序运行示例如下:
    Enter n:11
    2 4 6 8 10 11 12 14 16
    */
    #include <stdio.h>
    int main()
    { 
    	int a[20]={2,4,6,8,10,12,14,16};
    	int n,i,j,b[9];
    	printf("Enter n:");
    	scanf("%d",&n);
    	for(i=0;i<9;i++){
    		b[i]=a[i];//思路就是把未插入之前的a[i]赋值给b[i] 
    		if(n>=a[i]&&n<=a[i+1]){
    			b[i+1]=n;
    			i++;
    			break;  //假如n在数组之间,插入n在第i+1位,因为break,不继续循环,所以i++ 
    		}else if(n>=a[7]){
    			b[8]=n; //n大于16
    		}else if(n<=a[0]){
    			b[i]=n; //n小于2 
    			break;
    		}
    	} 
    	for(j=i+1;j<10;i++,j++){
    		b[j]=a[i]; 
    	}
    	for(j=0;j<9;j++){
    		printf("%d ",b[j]);
    	}
    }
    展开全文
  • 【问题描述】将两个已按升序排列数组合并成一升序数组,要求主函数输入两个数组,并输出合并后的结果,被调函数实现合并。 【输入形式】 输入数组A的元素数及元素 输入数组B的元素数及元素 【输出...

    【问题描述】将两个已按升序排列的数组合并成一个升序数组,要求在主函数中输入两个数组,并输出合并后的结果,在被调函数中实现合并。

    【输入形式】

    输入数组A的元素个数及元素

    输入数组B的元素个数及元素

    【输出形式】

    输出合并后的结果

    【样例输入】(下划线部分为键盘输入,其余部分为程序输出)

    Enter n: 3

    Enter 3 integers: 5 9 11

    Enter m: 3

    Enter 3 integers: 1 3 8

    【样例输出】

    1 3 5 8 9 11

    【样例说明】
    输入提示符后要加一个空格。例如“Input integers: ”,其中“:”后要加一个且只能一个空格。
    输出数据控制字符用%4d。
    英文字母区分大小写。必须严格按样例输入输出。

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    
    void bin(int n,int a[],int m,int b[])
    {
        int c[200];
        int i,j;
        for(i=0;i<n;i++)
        {
            c[i]=a[i];
        }
        for(i=n;i<n+m;i++)
        {
            c[i]=b[i-n];
        }
        for(i=0;i<m+n;i++)
        {
            for(j=0;j<m+n;j++)
            {
                if(c[i]<c[j])
                {
                    int t;
                    t=c[i];
                    c[i]=c[j];
                    c[j]=t;
                }
            }
        }
        for(i=0;i<n+m;i++)
        {
            printf("%4d",c[i]);
        }
    }
    
    int main()
    {
        int a[100],b[100];
        int m,n;
        printf("Enter n: ");
        scanf("%d",&n);
        printf("Enter %d integers: ",n);
        int i;
        for(i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
        }
        printf("Enter m: ");
        scanf("%d",&m);
        printf("Enter %d integers: ",m);
        for(i=0;i<m;i++)
        {
            scanf("%d",&b[i]);
        }
        bin(n,a,m,b);
        return 0;
    }
    

    为了方便,函数有四个参数,如需改为两个参数,可在函数内求出数组长度。

    展开全文
  • 把两个已按升序排列数组合并成一升序数组,要求用函数实现 #include<stdio.h> void f1(int  a[], int b[]) { int i = 0, j = 0, k = 0; int c[21]; while (i < 4 && j < 5) { if (a[i]...
  • 把两个已按升序排列数组合并成一升序数组,要求用函数实现(归并排序) i为a1数组元素下标 j为a2数组元素下标 k为a3数组元素下标 原理:比较i,j数字大小,当i<j时,把i的元素放入a3,给K++,i++(否则...
  • 【问题描述】将两个已按升序排列数组合并成一升序数组,要求主函数输入两个数组,并输出合并后的结果,被调函数实现合并。 【输入形式】 输入数组A的元素数及元素 输入数组B的元素数及元素 【输出...
  • VBA示例之 数组按升序排列,供初学者参考,大牛勿进~~~~~~~
  • 作业题,不知道错哪,请大佬帮忙看下,谢谢谢谢 #include <stdio.h> int a[16]={2, 3, 5, 7, 11, 13, 17, 23, 29, 31, 34, 71, 79, 97, 103}; void display() { int i; for(i=0; i<16; i++) printf(...
  • 1.程序编写 #include<stdio.h> void show(int *p3, int lenc) { for (int i = 0; i < lenc; i++) ...printf("%d,",p3[i] );...void Compare(int *p1, int lena, int *p2, int lenb, int *p3) ...
  • 把两个已按升序排列数组合并成一升序数组,要求用函数实现(归并排序)。 #include<stdio.h> void show(int* p3,int len3) { for (int i = 0; i < len3; ++i) { printf("%d,", p3[i]); } puts("\b...
  • #include<stdio.h> int main() { int i,x,num=5,flap=0; int a[10]={1,2,4,6,7}; scanf("%d",&x); for(i=0;i<num;i++) { if(a[i]>x){ flap=i; break;...i-...
  • 一个升序排列数组,  要求输入一个数后,数组仍然升序排列。试编程实现。  例如,原数组元素为:12 15 34 42 55 68 87 99,  插入元素50后,数组变为:12 15 34 42 50 55 68 87 99。 算法实现  void ...
  • 第二行是数组n个元素,相邻两项之间用一个空格隔开。 第三行是待插入的元素x。 输出 输出插入后数组的所有元素,相邻两项之间用一个空格隔开。 输入示例 5 1 3 5 7 9 2 输出示例 1 2 3 5 7 9 数据范围 输入...
  • 整数数组 nums 按升序排列数组中的值 互不相同 。 传递给函数之前,nums 预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], ...
  • 给定的一维排序(升序数组中寻找插入一个元素的位置 给定的一维排序(升序数组中寻找插入一个元素的位置,返回该元素在数组中的下标值。 如果该元素已经存在于数组中,则直接返回该元素在数组中的下...
  • 已知有个升序的数组,要求插入一个元素,仍升序排列
  • //升序数组插入数保持升序 Scanner myScanner = new Scanner(System.in); System.out.println("请输入要插入的排序的数"); int num = myScanner.nextInt(); int[] array = {10,12,45,90}; //默认为最.
  • #include<stdio.h> int main() { int a[5]={1,2,3,4,5},i=0,t,j,n,k; printf("(n>=5)n="); scanf("%d",&n); int c[n]; while(i+5!=n) { scanf("%d",&c[5+i]); i++; } ...=k-1.
  • 数组习题(2):将2个升序数组合并为一个升序数组
  • 升序数组中插入元素的三种方法
  • 1、例如输入数组1、2、4、7、11、15和数字15,输出4和11 2、代码 void fun(int arr[],int n,int key){ ...//因为已经排过序,所以声明两个变量,从第一个元素和最有一个元素出发 while(i!=j){ if(arr[i]+a...
  • 给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。 说明: 返回的下标值(index1 和 index2)不是从零开始的...
  • 数组升序排列后,插入一个数,仍然保持升序排列。 先进性逆序排序 ```java` public static void main(String[] args) { // TODO Auto-generated method stub Scanner input = new Scanner(System.in); int[] ...
  • 分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍来!请点击http://www.captainbed.net /* * Created by Chimomo * * Let X[0...n-1] and Y[0...n-1] be the two ...
  • 可以利用已知条件(两数组A、B均为升序),循环每个数组中均选取一个元素来对比,较小的放到新数组C。直到一个数组中的元素全部放入C,此时将另一个数组未放入的元素全放入到C,代码如下。//// main.c// c-...
  • //先创建一个数组存放原始数据 int arr1[] = {10,12,45,90}; //创建数组存放添加数据 int arr2[]=new int[5]; for(int j=0;j<arr1.length;j++){ arr2[j] = arr1[j]; } for(int i = 0; i< arr2....
  • 去掉一个数组中的重复项,并按升序排序 方法1:indexOf() function removeRepeat(arr){ let result = [] for(var i=0;i<arr.length;i++){ if(result.indexOf(arr[i]) == -1){ result.push(arr[i]) } } ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 86,422
精华内容 34,568
关键字:

在一个已按升序排列的数组中