数组插入问题
已有一个按递增序排列的正整数序列Array,其中任意两个元素都不同。现要将一正整数Key插入到序列Array中,并且依然保持Array的递增序。在此过程中,按判定顺序有可能出现以下几种情况:
1. 序列Array已经达到其容量上界;
2. 序列Array中已经有与Key相等的元素存在;
3. 序列Array既没有满,也没有与Key相等的元素,则Key可以插入序列Array之中,应获得其Key插入序列Array后所在的下标(从0开始)。
-----------------------------------------------------------------------------
编写函数getarray()、getkey()、insert()和result():
原型:int getkey(int key[]);
功能:按输入格式读取所有的待插入值,存放到整型数组key[]里,返回key[]中元素个数。
原型:int getarray(int array[]);
功能:按输入格式读取一个序列,存放到整型数组array[]里。
原型:int insert(int array[], int key, int vol);
功能:将key插入到整型数组array[]里,vol是array[]容量上限。根据题意描述的三种情况返回不同的值(你自己设计)。
原型:int result(int flag);
功能:结合insert()函数的返回值,根据输出格式和参数flag,产生不同的输出。
Input
输入的一个数是M,表示后面有M组测试数据。
每组测试数据有两部分组成:2行输入。第一部分是序列Array中的元素,最多不超过1000个,当读到0时表示序列输入结束。第二部分开始是一个正整数N(N较小),后面跟着N个待插入Array中的正整数key。
Output
输出为M行,每一行代表上述每一组输入的插入结果。其中:
如果存放序列的数组已满,则输出:“The array if full!”
如果序列中已经有Key,则输出:“The key is already in this array!”
如果Key可以插入Array,则输出:“The key is inserted in position x”. 其中x是Key插入数组后的下标。
我的代码哪里有问题啊。。
所有测试数据都对,提交就wrong answer
程序代码:
#include <stdio.h> #include <string.h> #define MAX_SIZE 1001 int getkey(int key[]) { int a,i; scanf("%d",&a); for(i=0;i<a;i++) scanf("%d",&key[i]); return a; } int getarray(int array[]) { int i=0; while (1) { scanf("%d",&array[i]); if(array[i]==0) break; i++; } return i; } int insert(int array[], int key, int vol) { int i,b=0,c,l; for(i=0;i<vol;i++) { if (array[vol] == 0) { b=2; break; } if(array[i]==key) { b=1; break; } else if (array[i] == 0) break; else b=0; } if(b==0) { for(c=0;c<vol;c++) { if(array[c]>key) break; if(array[c] == 0) { array[c] = key; array[c+1] = 0; return c; } } for(l=vol;l>c;l--) array[l]=array[l-1]; array[c]=key; return c; } else if(b==1) return -2; else if(b==2) return -1; } int result(int flag) {if(flag==-1) printf("The array if full!\n"); else if(flag==-2) printf("The key is already in this array!\n"); else printf("The key is inserted in position %d.\n",flag); } int main() { int array[MAX_SIZE], cases, ca, i, key[MAX_SIZE], size; scanf("%d", &cases); for(ca = 1; ca <= cases; ca++) { getarray(array); size = getkey(key); printf("Case %d:\n", ca); for(i = 0; i < size; i++) result(insert(array, key[i], MAX_SIZE - 1)); } return 0; }
主函数是题目给的,不能改动。