题目题目:在长度为n的整数序列中删除指定为序的m个元素,按照原顺序输出剩余的元素。其中,1≤m≤n≤1000,原序列为a,要删除的位序序列为b。例如:n=10,m=5,a={3,56,7,9,23,45,78,90,67,33},b={0,4,6,7,9},则输出结果为{56,7,9,45,67}
下面是解析:
/*删除指定位置的元素,注意位序从0开始*/
int DelList(sqlist *L,int i)
{
int k;
if(i<0 || i>L->length-1 || L->length==0)
return 0;
for(k=i; k<L->length-1; k++)
{
L->data[k]=L->data[k+1];
}
L->length--;
return 1;
}
/*删除多个元素
注意:若按照从前至后的顺序由于长度变化会改变元素的位置
采用从后往前删就不会影响前面的数据位置
*/
int DelMany(sqlist *La,sqlist *Lb)
{
int k;
for(k=Lb->length-1; k>=0; k--)
{
DelList(La,Lb->data[k]);
}
return 1;
}
/*输出元素*/
void print(sqlist *L)
{
int i;
for(i=0; i<L->length-1; i++)
printf("%d ",L->data[i]);
printf("%d\n",L->data[L->length-1]);
}
int main()
{
sqlist La,Lb;
int i;
scanf("%d %d",&La.length,&Lb.length);
for(i=0; i<La.length; i++)
scanf("%d",&La.data[i]);
for(i=0; i<Lb.length; i++)
scanf("%d",&Lb.data[i]);
DelMany(&La,&Lb);
print(&La);
return 0;
}
/*完整代码*/
#include<stdio.h>
#define maxsize 1100
typedef struct
{
int data[maxsize];
int length;
} sqlist;
/*删除指定位置的元素*/
int DelList(sqlist *L,int i)
{
int k;
if(i<0 || i>L->length-1 || L->length==0)
return 0;
for(k=i; k<L->length-1; k++)
{
L->data[k]=L->data[k+1];
}
L->length--;
return 1;
}
/*删除多个元素
注意:若按照从前至后的顺序由于长度变化会改变元素的位置
采用从后往前删就不会影响前面的数据位置
*/
int DelMany(sqlist *La,sqlist *Lb)
{
int k;
for(k=Lb->length-1; k>=0; k--)
{
DelList(La,Lb->data[k]);
}
return 1;
}
/*输出元素*/
void print(sqlist *L)
{
int i;
for(i=0; i<L->length-1; i++)
printf("%d ",L->data[i]);
printf("%d\n",L->data[L->length-1]);
}
int main()
{
sqlist La,Lb;
int i;
scanf("%d %d",&La.length,&Lb.length);
for(i=0; i<La.length; i++)
scanf("%d",&La.data[i]);
for(i=0; i<Lb.length; i++)
scanf("%d",&Lb.data[i]);
DelMany(&La,&Lb);
print(&La);
return 0;
}
期待一个小赞赞~