已知一组数据,采用顺序存储结构存储,其中所有的元素为整数。设计一个算法,删除元素值在[x,y]之间的所有元素
输入格式:
输入包含三行数据,第一行是表中元素个数,第二行是顺序表的各个元素,第三行是区间x和y。
输出格式:
删除元素值在[x,y]之间的所有元素后,输出新的顺序表。(最后无空格)
输入样例:
10
55 11 9 15 67 12 18 33 6 22
10 20
输出样例:
55 9 67 33 6 22
分析:
这道题我之前搞复杂了,我是用的结构体,每次比对元素,如在区间内就将它删除,而删除就是后面往前移。这样代码复杂冗长。太过于麻烦。后来采用了提取数组元素的方法。建立两个数组,遍历数组时,遇到不在区间内的元素就将它提取到另外一个数组里去。最后输出后面那个数组即可。这里要注意数组的长度增减。
答案:
#include <stdio.h>
int main()
{
int sum,i,j =0,k;
int min,max;
scanf("%d",&sum);
int a[sum];
int t[sum];
for(i=0;i<sum;i++){
t[i]=0;
}
for(i=0;i<sum;i++){
scanf("%d",&a[i]);
}
scanf("%d%d",&min,&max);
for(i=0;i<sum;i++){
if(a[i]>=min&&a[i]<=max)continue;
t[j]=a[i];
j++;
}
k=j;
for(i=0;i<k;i++){
if(i!=k-1)
printf("%d ",t[i]);
else{
printf("%d",t[i]);
break;
}
}
return 0;
}
如果觉得博主写得不错的话,就点个赞或者关注吧!