明明的随机数

Posted 码子哥今日说码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了明明的随机数相关的知识,希望对你有一定的参考价值。

菜鸟小白C语言写明明的随机数【随缘学习】

题目所述基本内容

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

输入格式

*输入有两行,第11行为11个正整数,表示所生成的随机数的个数NN
第22行有NN个用空格隔开的正整数,为所产生的随机
数。

输出格式

输出也是两行,第11行为11个正整数MM,表示不相同的随机数的个数。

第22行为MM个用空格隔开的正整数,为从小到大排好序的不相同的随机数。

输入输出样例

在这里插入图片描述

解题关键

此题关键在于删除多余的重复数字(只保留一个),以及数的大小比较。
1.删除重复的数字:利用双重循环,将每个值依次与其后面的值相比较,如果有相同的则删除该元素即可。删除时,可以使用将后面元素依次向前移动一位,同时总长度减一的方式。
2.数的大小比较:
a.桶排序(最快最简单的排序)

在这里插入图片描述

b.冒泡排序(本人用的就是这种方法)
在这里插入图片描述

c.选择排序(最常用的排序)
在这里插入图片描述
在这里插入图片描述

代码

#include<stdio.h>
int main()
{   int n,a[1000],j,m,k,i,t;
    m=0;
    scanf("%d",&n);
    for(i=0; i<n; i++)
    {
        scanf("%d",&a[i]);
    }
    for(i=1; i<=n-1; i++)
    {   for(j=1; j<=n-i; j++)
        {   if(a[j]<a[j+1])
            {
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
        }
        for(i=0; i<n-1; i++)
        {   for(j=i+1; j<n; j++)
                if(a[i]==a[j])
                {   for(k=j; k<n-1; k++)
                        a[k]=a[k+1];
                    n--;
                    j--;
                }
        }
    }
    for(i=0; i<n; i++)
    {   if(a[i]==a[i+1])
            m++;
    }
    printf("%d",n-m);
    printf("\\n");
    for(i=0; i<n-m; i++)
        printf("%d ",a[i]);
}

随缘学习

结束语

好兄弟好兄弟,留下你的点赞和关注噢

以上是关于明明的随机数的主要内容,如果未能解决你的问题,请参考以下文章

华为机试题 HJ3明明的随机数

明明的随机数

1075 明明的随机数

算法训练 明明的随机数

明明的随机数

明明的随机数