PTA题目:顺序表(删除)

已知一组数据,采用顺序存储结构存储,其中所有的元素为整数。设计一个算法,删除元素值在[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;
}

如果觉得博主写得不错的话,就点个赞或者关注吧!

猜你喜欢

转载自blog.csdn.net/qq_45619909/article/details/109146225