有一个已经排好序的数组,例如{11,16,25,30,57,77,87}。要求输入一个数。在数组中查找是否有这个数,如果有,将该数从数组中删除,要求删除后的数组仍然保持有序,如果没有,则输出“数组中没有这个数
#include<iostream>
using namespace std;
int find(int *A,int a,int low,int high){
if(high != low){
int mid=(high+low)/2;
if(A[mid]==a) return mid;
if(A[mid]>a) return find(A,a,low,mid);
if(A[mid]<a) return find(A,a,mid+1,high);
}
else if(A[low]==a) return low;
return -1;
}
int deleteX (int *A,int length,int l){
int i=0;
for(i=l;i<length-1;i++){
A[i]=A[i+1];
}
A[i]=0;
return 1;
}
int main(){
int A[100];
int len,i,a;
cout<<"请输入这个升序排列的数组有多少个数:";
cin>>len;//输入有多少个数。不超过100;
cout<<"请依次输入数组中的元素:";
for(i=0;i<len;i++)
cin>>A[i];
cout<<"请输入要查找并删除的数:";
cin>>a;//输入要删除的数。
int l = find(A,a,0,len);
if(l!=-1){
deleteX(A,len,l);
cout<<"删除元素之后的数组。";
for(i=0;i<len-1;i++){
cout<<A[i]<<" ";
}
cout<<endl;
}
else cout<<"数组中不存在这个数!";
return 0;
}
using namespace std;
int find(int *A,int a,int low,int high){
if(high != low){
int mid=(high+low)/2;
if(A[mid]==a) return mid;
if(A[mid]>a) return find(A,a,low,mid);
if(A[mid]<a) return find(A,a,mid+1,high);
}
else if(A[low]==a) return low;
return -1;
}
int deleteX (int *A,int length,int l){
int i=0;
for(i=l;i<length-1;i++){
A[i]=A[i+1];
}
A[i]=0;
return 1;
}
int main(){
int A[100];
int len,i,a;
cout<<"请输入这个升序排列的数组有多少个数:";
cin>>len;//输入有多少个数。不超过100;
cout<<"请依次输入数组中的元素:";
for(i=0;i<len;i++)
cin>>A[i];
cout<<"请输入要查找并删除的数:";
cin>>a;//输入要删除的数。
int l = find(A,a,0,len);
if(l!=-1){
deleteX(A,len,l);
cout<<"删除元素之后的数组。";
for(i=0;i<len-1;i++){
cout<<A[i]<<" ";
}
cout<<endl;
}
else cout<<"数组中不存在这个数!";
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答 推荐于2018-03-20
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int array[7]={11,16,25,30,57,77,87};
int data=0,i,j;
int flag=0;
printf("input the data:\n");
scanf("%d",&data);
for(i=0;i<7;i++){
if(data==array[i]){
for(j=i;j<7;j++){
array[j]=array[j+1];
flag=1;
}
}
}
if(flag==0){
printf("no the data\n");
}else{
for(i=0;i<6;i++)
printf("%d ",array[i]);
}
return 0;
}本回答被网友采纳
#include <stdlib.h>
int main(int argc, char *argv[]) {
int array[7]={11,16,25,30,57,77,87};
int data=0,i,j;
int flag=0;
printf("input the data:\n");
scanf("%d",&data);
for(i=0;i<7;i++){
if(data==array[i]){
for(j=i;j<7;j++){
array[j]=array[j+1];
flag=1;
}
}
}
if(flag==0){
printf("no the data\n");
}else{
for(i=0;i<6;i++)
printf("%d ",array[i]);
}
return 0;
}本回答被网友采纳