題目
題目:在長度為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;
}
期待一個小贊贊~