A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

表示看着答案都看不懂。。有大神帮着解释解释么
答案如下:
#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;
}

16 个回复

倒序浏览
顶一个!!!!加油
回复 使用道具 举报
/*
有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;
}   
看看我这种
回复 使用道具 举报 1 0
定起来。。。
回复 使用道具 举报
赞一个!!!
回复 使用道具 举报
  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. */
复制代码

点评

好吧 我看懂了 // int a[10] = {0};//这个是数组初始化,元素全为0,这里通过下面的循环体来记录每个数出现的次数 // for (int i = 0; i < 10; i++)//这...   发表于 2016-5-28 11:55
回复 使用道具 举报
嗯,虽然没看懂啥意思,不过我也感觉很“不明觉厉”的样子。。
回复 使用道具 举报
llo 中级黑马 2015-7-21 22:19:23
8#
卖毛玉的小贩 发表于 2015-7-21 21:42
/*
有1000000个数,每个数取值范围是0-999999,找出其中重复的数。
*/

坑比  我的题   我打算回答水分的 你就给发了
回复 使用道具 举报
卖毛玉的小贩 发表于 2015-7-21 21:42
/*
有1000000个数,每个数取值范围是0-999999,找出其中重复的数。
*/

牛逼哎,佩服
回复 使用道具 举报
看着很屌的样子。。。
回复 使用道具 举报
卖毛玉的小贩 发表于 2015-7-21 21:42
/*
有1000000个数,每个数取值范围是0-999999,找出其中重复的数。
*/

咩  还是没看懂的说
回复 使用道具 举报
本帖最后由 yin506859351 于 2016-5-28 12:00 编辑

//        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);
//            }
//        }

不得不说 这方法太好了~~~~咩~
回复 使用道具 举报
六六六
回复 使用道具 举报
表示看不懂
回复 使用道具 举报
Cathy 中级黑马 2016-5-29 00:21:41
15#
/*
有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;
回复 使用道具 举报
表示不再xc 里面写,完全不想看
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马