蓝桥杯题库 数组查重排序问题

题目

输入限定个数的数组,相同的数值保留一个,并且对不同的数值进行大小排序,最后输出。

输入输出示例:10   

                          20 40 32 67 78 89 56 23 1 5 20

                          9

                          1 5 20 23 32 40 56  67 78 89

#include <stdio.h>

int main()
{
    int num=0;
    scanf("%d",&num);
    int a[num];
    for(int i=0; i<num; i++)
    {
        scanf("%d",&a[i]);
    }                                   //读取数组

    for(int i=0; i<num-1; i++)          //查重操作
    {
        for(int j=i+1; j<num; j++)
        {
            int desk;
            desk=a[i];
            if(desk==a[j])
            {
                a[j]=-1;
            }
        }
    }

    for(int i=0; i<num-1; i++)          //冒泡排序
    {
        for(int j=0; j<num-i-1; j++)
        {
            int c;
            if(a[j]>a[j+1])
            {
                c=a[j+1];
                a[j+1]=a[j];
                a[j]=c;
            }
        }
    }

    int num2=0;                        //计数并且输出
    int flag=0;
    for(int i=0; i<num; i++)
    {
        if(a[i]!=-1)num2++;
    }
    printf("%d\n",num2);
    for(int i=0; i<num; i++)
    {
        if(flag==1)printf(" ");
        if(a[i]!=-1)
        {
            flag=1;
            printf("%d",a[i]);
        }

    }

    return 0;
}

思路描述:较简单,如代码注释所示

过程反思 : 

查重思路有创新之处:利用 -1 替代重复多余的值。(不影响后期大小排序并且容易筛选)

冒泡法出错 应用不熟练(冒泡法确定位置值一定是从末尾往头开始确定的!)(并且两层循环)

最后控制输出格式也有创新(利用标志FLAG控制空格问题)以后再遇见这种输出格式 “56 89 45 23 1 564”可以参考该方法 还是先输出空格的思路   因为空格输出了就吃不掉了!!

发布了10 篇原创文章 · 获赞 0 · 访问量 109

猜你喜欢

转载自blog.csdn.net/weixin_45076393/article/details/104523319
今日推荐