原题链接:明明的随机数
解题思路:
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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复