-
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代码-(数组)将两个升序数组合并为一个升序数组
2021-07-16 15:26:57cpp代码-(数组)将两个升序数组合并为一个升序数组 -
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插入数组中,使数组元素仍按升序排列。...
2022-06-04 15:35:00在升序排序的数组中插入一个元素 用函数编程实现在一个按升序排序的数组中查找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]); } }
-
将两个已按升序排列的数组合并成一个升序数组,要求在主函数中输入两个数组,并输出合并后的结果。
2020-05-09 22:04:06【问题描述】将两个已按升序排列的数组合并成一个升序数组,要求在主函数中输入两个数组,并输出合并后的结果,在被调函数中实现合并。 【输入形式】 输入数组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; }
为了方便,函数有四个参数,如需改为两个参数,可在函数内求出数组长度。
-
把两个已按升序排列的数组合并成一个升序数组,要求用函数实现
2019-07-30 17:55:38把两个已按升序排列的数组合并成一个升序数组,要求用函数实现 #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]... -
把两个已按升序排列的数组合并成一个升序数组,要求用函数实现(归并排序)
2019-07-30 19:34:15把两个已按升序排列的数组合并成一个升序数组,要求用函数实现(归并排序) i为a1数组元素下标 j为a2数组元素下标 k为a3数组元素下标 原理:比较i,j数字大小,当i<j时,把i中的元素放入a3中,给K++,i++(否则... -
将两个已按升序排列的数组合并成一个升序数组,要求在主函数中输入两个数组,并输出合并后的结果,在被调函...
2020-11-15 02:25:47【问题描述】将两个已按升序排列的数组合并成一个升序数组,要求在主函数中输入两个数组,并输出合并后的结果,在被调函数中实现合并。 【输入形式】 输入数组A的元素个数及元素 输入数组B的元素个数及元素 【输出... -
VBA示例之 数组按升序排列
2019-10-26 16:24:01VBA示例之 数组按升序排列,供初学者参考,大牛勿进~~~~~~~ -
{c}已经有一个按升序排列的数组,编写程序输入一个整数x,把x插入到数组中,使数组仍然保持升序。数组如下...
2021-12-02 19:56:11作业题,不知道错在哪,请大佬帮忙看下,谢谢谢谢 #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(... -
归并: 把两个已按升序排列的数组合并成一个升序数组,要求用函数实现
2019-07-30 19:36:031.程序编写 #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) ... -
c程序:把两个已按升序排列的数组合并成一个升序数组,要求用函数实现(归并排序)。
2019-07-30 19:19:29把两个已按升序排列的数组合并成一个升序数组,要求用函数实现(归并排序)。 #include<stdio.h> void show(int* p3,int len3) { for (int i = 0; i < len3; ++i) { printf("%d,", p3[i]); } puts("\b... -
数组:向升序的数组里面插入一个数使得数组仍然有序。
2019-10-13 22:25:10#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-... -
在升序排序的数组中插入一个数[尾插法]
2018-08-08 16:09:19有一个升序排列的数组, 要求输入一个数后,数组仍然升序排列。试编程实现。 例如,原数组元素为:12 15 34 42 55 68 87 99, 插入元素50后,数组变为:12 15 34 42 50 55 68 87 99。 算法实现 void ... -
[C语言]向有序数组插入:已有一个按升序排序的数组,含n个元素。输入整数x,将x插入数组中,使数组元素仍按...
2022-03-24 13:22:32第二行是数组n个元素,相邻两项之间用一个空格隔开。 第三行是待插入的元素x。 输出 输出插入后数组的所有元素,相邻两项之间用一个空格隔开。 输入示例 5 1 3 5 7 9 2 输出示例 1 2 3 5 7 9 数据范围 输入... -
33. 搜索旋转排序数组:整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先...
2022-04-07 16:44:17整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], ... -
在给定的一维已排序(升序)数组中寻找插入一个元素的位置
2018-04-01 09:59:31在给定的一维已排序(升序)数组中寻找插入一个元素的位置 在给定的一维已排序(升序)数组中寻找插入一个元素的位置,返回该元素在数组中的下标值。 如果该元素已经存在于数组中,则直接返回该元素在数组中的下... -
已知有个升序的数组,要求插入一个元素,该数组顺序依然是升序,比如【10,12,45,90】,添加23.
2022-04-09 09:08:32已知有个升序的数组,要求插入一个元素,仍升序排列 -
java升序数组插入一个数保持升序
2021-11-28 17:18:56//升序数组插入数保持升序 Scanner myScanner = new Scanner(System.in); System.out.println("请输入要插入的排序的数"); int num = myScanner.nextInt(); int[] array = {10,12,45,90}; //默认为最. -
2. 已知一个已按升序排列的整型数组,从键盘输入任意几个整数,要求按原来排序规则将其插入到数组的相应...
2021-11-25 20:41:50#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个升序数组合并为一个升序数组
2021-12-10 11:40:33数组习题(2):将2个升序数组合并为一个升序数组 -
【数组】向升序数组中插入元素的三种方法
2022-01-13 22:43:59向升序数组中插入元素的三种方法 -
输入一个已经按升序排列过的数组和一个数字,在数组中查找这两个数,使得正好等于输入的那个数,输出数组中...
2020-03-22 10:11:401、例如输入数组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... -
给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数
2020-06-16 13:50:29给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。 说明: 返回的下标值(index1 和 index2)不是从零开始的... -
将数组升序排列后,插入一个数,仍然保持升序排列。
2019-04-22 08:48:52将数组升序排列后,插入一个数,仍然保持升序排列。 先进性逆序排序 ```java` public static void main(String[] args) { // TODO Auto-generated method stub Scanner input = new Scanner(System.in); int[] ... -
算法 - 有两个相同大小数组均已按升序排列,编程计算这两个数组的中位数(C++)
2019-02-26 10:41:50分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net /* * Created by Chimomo * * Let X[0...n-1] and Y[0...n-1] be the two ... -
[c语言]将两个整形升序数组合并为一个升序数组
2021-05-22 03:04:00可以利用已知条件(两数组A、B均为升序),循环在每个数组中均选取一个元素来对比,较小的放到新数组C中。直到一个数组中的元素已全部放入C中,此时将另一个数组未放入的元素全放入到C中,代码如下。//// main.c// c-... -
Java:已知一个升序数组,要求插入一个元素,该数组顺序仍然是升序。
2022-02-22 16:00:15//先创建一个数组存放原始数据 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.... -
去掉一个数组中的重复项,并按升序排序
2021-03-24 09:08:44去掉一个数组中的重复项,并按升序排序 方法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]) } } ...