我前面测试点都是正确的,而最后一个只是把前面测试点都结合起来了而已,但是却显示最后一个答案错误,下面是我的代码。
int insert(int a[ ], int value)
{
int i,temp;
for(i=0;i<Count;i++){
if(a[i]==value)return -1;
}
a[Count]=value;
for(i=Count;i>0;i--){
if(a[i-1]>a[i]){
temp=a[i];
a[i]=a[i-1];
a[i-1]=temp;
}
}
Count++;
return 0;
}
int del(int a[ ], int value) /* 删除有序数组a中等于value的元素的函数 */
{
int i,j;
for(i=0;i<Count;i++){
if(a[i]==value){
for(j=i;j<Count;j++){
a[j]=a[j+1];
Count--;
return 0;
}
}
}
return -1;
}
int modify(int a[ ], int value1, int value2) /* 将有序数组a中等于value1的元素,替换为value2 */
{
int i,j,flag=0;
for(i=0;i<Count;i++){
if(a[i]==value2)return -1;
if(a[i]==value1)flag++;
}
if(flag==0)return -1;
for(i=0;i<Count;i++){
if(a[i]==value1){
a[i]=value2;
}
}
for(i=0;i<Count;i++){
for(j=i;j<Count-1;j++){
if(a[j]>a[j+1]){
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
return 0;
}
int query(int a[ ], int value) /* 用二分法在有序数组a中查找元素value的函数 */
{
int i=0,j=Count-1,m;
while(i<=j){
m=(i+j)/2;
if(a[m]==value)return m;
else if(a[m]>value){
j=m-1;
}
else if(a[m]<value){
i=m+1;
}
}
return -1;
}
什么题目?
发一下pta页面地址,我测试下
23行循环错了,应该j<Count-1。否则下面a[j+1]就越界了