StarHui


私信TA

用户名:uq_15565483691

访问量:3959

签 名:

只要你想,世界就会出现奇迹!

等  级
排  名 326
经  验 5424
参赛次数 2
文章发表 25
年  龄 18
在职情况 学生
学  校 西安汽车职业大学
专  业 人工智能

  自我简介:

大一新生一枚 一起学习交流,请加V:StarHui0415 个人公众号:阿辉的大本营 公众号会每天更新一道算法题!!!

TA的其他文章

解题思路:

            1、先进行排序,先不管重复的数字。这里我使用的是冒泡排序法,让两个相邻的数字比较,如果第一个数比第二个数大,就互换;反之不变。

            2、排序完成了,就剩去重了。如何知道去重后的数组元素是几个呢?定义一个变量,令它等于N(第一行输入的数,即多少个数字),然后使用一个for循环,加上一个判断语句,如果前面的数等于后面的数,就减1。等循环结束打印即可

            3、最后一步,还剩打印不重复的数字了。利用for循环,加上一个判断语句,如果前面的数不等于后面的数,就打印

注意事项:

            1、在排序的时候可能会存在一些问题,我使用的是冒泡排序,注意好循环条件,就没有什么注意的了

            2、最后打印不重复数字时,那个循环控制条件还是要用之前的数字长度,而不是新的不重复数组长度,我并没有对数组本身进行处理,只是打印进行处理

            3、此代码可能比较麻烦,但是比较简单易懂,对新生比较友好

参考代码:

#include <stdio.h>
void bubble_sort(int nums[],int len)
{
    int i,j,temp;
    for(i = 0;i < len - 1;i++)//不循环到最后一个数字,是因为倒数第二个元素就能与它进行互换(不互换)操作
    {
        for(j = 0;j < len - 1 - i;j++)//这里写成len - 1 - i,是因为经过前面的循环,后面的i个元素已经排序完成了
        {
            if(nums[j] > nums[j + 1])//前面的数字比后面的数大时,就进行互换
            {
                temp = nums[j];
                nums[j] = nums[j + 1];
                nums[j + 1] = temp;
            }
        }
    }
}
int main()
{
    int N;
    scanf("%d",&N);
    int i,nums[N];
    for(i = 0;i < N;i++)
    {
        scanf("%d",&nums[i]);//把N个数字存入数组
    }
    bubble_sort(nums,N);
    int new_len = N;//用来计算不重复数字
    for(i = 0;i < N;i++ )
    {
        if(nums[i] == nums[i + 1])
            new_len -= 1;//如果有相同数字,就减1
    }
    printf("%d\n",new_len);
    for(i = 0;i < N;i++ )
    {
        if(nums[i] != nums[i + 1])//如果前面的元素与后面的元素不相同就打印
            printf("%d ",nums[i]);
    }
    return 0;
}


 

0.0分

0 人评分

  评论区

  • «
  • »