作者 陈春丽
单位 中国地质大学(北京)
从一个有序数组(由小到大)中删除一个数据。如数组a={1,3,5,7,9},删除3后的a是{1,5,7,9},长度减1(不会释放数组内存)。如果要删除的数据不在数组中,数组不变。
注意:最多只删除第1个找到的数据,如果数组中有多个相同值也只删除一个,如数组a={1,3,5,5},删除5后的数组a是{1,3,5}。
【提示】查找算法找到要删除数据的位置,如果找到了,从该位置的下一个位置开始直到数组末尾,执行a[i-1] = a[i]运算,将元素前移一个位置。删除后数组长度-1。如果没有找到,数组不变。
函数接口定义:
bool del(int a[], int &n, int key);a是int型数组,有n个有序元素(由小到大);n是引用型形参,函数题删除数组key值则n-1修改了实参值,若未删除则不变;
key要删除的值;
函数返回值为true表示删除成功,同时n的值-1,返回false表示删除失败(没找到要删除的数据)。
裁判测试程序样例:
#include<iostream> using namespace std; void input(int a[], int &n); void print(int a[], int n); bool del(int a[], int &n, int key); const int N=100; int main() { int a[N]; int n; cin >> n; //n<N input(a,n); //输入n个整数 int key; //要删除的元素值 cin >> key; if(del(a,n,key)) print(a,n); else cout << "delete fail."; return 0; } void input(int a[], int &n) { for(int i=0; i<n; i++) cin >> a[i]; } void print(int a[], int n) { for(int i=0; i<n; i++) cout << a[i] << " "; cout << endl; } /* 请在这里填写答案 */输入格式:
第一行输入1-100的整数n;
第二行输入n个整数,用空格分隔;
第三行输入要删除的整数。
输出格式:
输出删除5之后数组的值
输入样例1:
5 1 3 5 7 9 5输出样例1:
1 3 7 9输入样例2:
5 11 13 15 17 19 10输出样例2:
数组中没有要删除的10
delete fail.参考示例:
bool del(int a[],int &n,int key){ for(int i=0;i<n;i++){ if(a[i]==key){ for(int j=i;j<n+1;j++){ a[j]=a[j+1]; } n--; return true; } } return false; }