黑马程序员技术交流社区

标题: 有1000000个数,每个数取值范围是0-999999,找出其中重复的数。 [打印本页]

作者: 杨远鹏    时间: 2015-7-21 21:32
标题: 有1000000个数,每个数取值范围是0-999999,找出其中重复的数。
表示看着答案都看不懂。。有大神帮着解释解释么
答案如下:
#define COUNT 1000000

int main(void)
{
    int a[COUNT] = {0};
    for (int i = 0; i < COUNT; i++) {
        int number = arc4random_uniform(5);
        //把随机数作为下标,值作为出现次数
        a[number] ++;
    }
    //输出 重复的数字以及重复次数
    for(int i = 0 ;i < COUNT;i++){
        if (a[i] > 1) {
            printf("%d repeats %d times\n",i+1,a[i]);
        }
    }
    return 0;
}
作者: 小蜗牛0519    时间: 2015-7-21 21:38
顶一个!!!!加油
作者: 卖毛玉的小贩    时间: 2015-7-21 21:42
/*
有1000000个数,每个数取值范围是0-999999,找出其中重复的数。
*/
#include <stdio.h>
#include <stdlib.h>
void chongFuShu(){
    //    z  表示显示出现的次数从多少开始
    int z = 0;
    int a[1000000]={};
    int b[999999]={};
    int i;
    //   给数组a赋初值
    for (i=0; i<1000000; i++) {
        a[i]=arc4random_uniform(999999+1);
    }
    //    用数组b存储数组a中的数据 如果相同 则加1
    for (i = 0; i < 1000000; i++) {
        b[a[i]]++;
    }
   
    //    输出0-y之间的数的出现的次数
    for (i=0; i<=999999; i++) {
        if(b[i]>=z)
            printf("%2d出现%5d次\n",i, b[i]);
    }
   
    //   显示总共出现的次数
    int sum=0;
    for (i=0; i<=999999; i++) {
        if(b[i]>=z)
            sum+=b[i];
    }
    printf("总共%d次\n", sum);
   
}
int main(int argc, const char * argv[]) {
    chongFuShu();
    return 0;
}   
看看我这种
作者: yongwei    时间: 2015-7-21 21:45
定起来。。。
作者: likang    时间: 2015-7-21 21:49
赞一个!!!
作者: Northcity    时间: 2015-7-21 22:12
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define COUNT 1000000//宏定义
  4. int main(void)
  5. {
  6.     int a[COUNT] = {0};//这个就是数组初始化,数组元素全为0
  7.     /*
  8.    
  9.      */
  10.     for (int i = 0; i < COUNT; i++) {
  11.         int number = arc4random_uniform(5);
  12.         /*这个循环作用就是循环1000000次,每次随机生成0~~4之间的随机数,赋值给number
  13.          */
  14.         a[number] ++;
  15.         /*注意这个语句作用,理解数组下标和数组元素的值区别,number是数组下标,a[number]是下标所对应数组元素值,这个数组范围是0~~999999,当随机生成number值等于0~~999999之间数时候,该下标对应数组元素自增1,
  16.          */
  17.     }
  18.     for(int i = 0 ;i < COUNT;i++){
  19.         /*这里就是简单遍历数组,当数组元素值补位 0 就输出里面的值(这个值就是他重复出现的次数)
  20.          */
  21.         if (a[i] > 1) {
  22.             printf("%d repeats %d times\n",i+1,a[i]);
  23.         }
  24.     }
  25.     return 0;
  26. }
  27. /*
  28. 运算结果:
  29. 1 repeats 200340 times
  30. 2 repeats 199858 times
  31. 3 repeats 200285 times
  32. 4 repeats 199432 times
  33. 5 repeats 200085 times
  34.     最后我想吐槽给出答案的人,
  35.     1 这段代码定义这么那么大数组,却仅出现0~~4随机数,也就是说 5~~999999数组元素都是不会重复出现的,这样居心何在啊???
  36.     2 printf("%d repeats %d times\n",i+1,a[i]);这里输出为何还要i+1?不直接输出i,难道故意迷惑人的么 - -
  37. */
复制代码

作者: 午夜码农    时间: 2015-7-21 22:15
嗯,虽然没看懂啥意思,不过我也感觉很“不明觉厉”的样子。。
作者: llo    时间: 2015-7-21 22:19
卖毛玉的小贩 发表于 2015-7-21 21:42
/*
有1000000个数,每个数取值范围是0-999999,找出其中重复的数。
*/

坑比  我的题   我打算回答水分的 你就给发了
作者: wy911011    时间: 2015-7-21 22:23
卖毛玉的小贩 发表于 2015-7-21 21:42
/*
有1000000个数,每个数取值范围是0-999999,找出其中重复的数。
*/

牛逼哎,佩服
作者: 丁铭检    时间: 2015-7-22 22:26
看着很屌的样子。。。
作者: yin506859351    时间: 2016-5-28 10:02
卖毛玉的小贩 发表于 2015-7-21 21:42
/*
有1000000个数,每个数取值范围是0-999999,找出其中重复的数。
*/

咩  还是没看懂的说

作者: yin506859351    时间: 2016-5-28 11:56
本帖最后由 yin506859351 于 2016-5-28 12:00 编辑
Northcity 发表于 2015-7-21 22:12

//        int a[10] = {0};//这个是数组初始化,元素全为0,这里通过下面的循环体来记录每个数出现的次数
//        for (int i = 0; i < 10; i++)//这里循环十次,得到10个随机数。
//        {
//            int number = arc4random_uniform(9);//这里产生0-9的随机数
//            printf("%d ",number);//打印随机数是多少,第一个随机数即i=0时产生的,假如是6
//            a[number] ++;//比如第一个随机数,即i=0时产生的,假如是6,那么a[6]++等同于a[6]=0+1,即6出现了第一次,假如出现第二次那么a[6]=2,始终6这个数字对应出现的次数都将会是最新的。
//            printf("%2d \n",a[number]);//打印都有哪些随机数?出现了的第几次?
//        }
//        printf("\n");
//        for(int i = 0 ;i < 10;i++)//循环十次,这是i代表0-9可能出现的数字a代表数字i出现的次数
//        {
//            if (a > 1)//大于1次的才打印次数,不然怎么能叫重复了?
//            {
//                printf("%d repeats %d times\n",i,a);
//            }
//        }

不得不说 这方法太好了~~~~咩~

作者: huzhiqiang    时间: 2016-5-28 21:13
六六六
作者: 梁木木    时间: 2016-5-28 22:14
表示看不懂
作者: Cathy    时间: 2016-5-29 00:21
/*
有1000000个数,每个数取值范围是0-999999,找出其中重复的数。
*/
#include <stdio.h>
#include <stdlib.h>
#define LEN 999999
int main(int argc, const char * argv[]) {
    int arr[LEN]={0};
    int arrRandom[LEN]={0};
    for (int i=0; i<LEN; i++) {
        int number=arc4random_uniform(LEN);
        arr[number]++;
        arrRandom=number;
    }
    for (int i=0; i<LEN; i++) {
        if (arr>0) {
            printf("%d这个数重复了%d次\n",arrRandom,arr);
        }
    }
    return 0;

作者: qq874983484    时间: 2016-5-29 22:53
表示不再xc 里面写,完全不想看




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2