如何统计' 0-6'之间随机数的次数在给定的数组中打印?

时间:2015-04-05 21:13:33

标签: c arrays

我试图计算在给定数组中出现0-6的数字的次数,该数组具有从随机数生成器生成的值。但是,我的代码只返回'0'而不是计算数字出现在数组中的次数。我是新手,有人可以帮助我吗?

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
    int array[7];
    int i;
    int zero=0;
    int one=0;
    int two=0;
    int three=0;
    int four=0;
    int five=0;
    int six=0;

    for (i=0; i<=7; i++)
            array[i] = i;

    srand( (unsigned)time( NULL ) );
    for (i=0; i<=7; i++)
    {
            int index1 = i;
            int index2 = rand()%7;

            int temp;
            temp = array[index1];
            array[index1] = array[index2];
            array[index2] = temp;



    if(i==48){zero++;}

     else{if(i==49){one++;}

    else{if(i==50){two++;}

     else{if(i==51){three++;}

     else{if(i==52){four++;}

    else{if(i==53){five++;}

    else{if(i==54){six++;}

     }}}}}}}

    for (i=0; i<=7; i++){
    printf("array[%d] = %d\n",i,array[i]);}
    printf("Number of times each number came up is:\n");
    printf("Zero:%d\n", zero);
    printf("One:%d\n", one);
    printf("Two:%d\n", two);
    printf("Three:%d\n", three);
    printf("Four:%d\n", four);
    printf("Five:%d\n", five);
    printf("Six:%d\n", six);




    return(0);
     }

2 个答案:

答案 0 :(得分:0)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define MAX_RAND_NUMBERS (1000)

int main(void)
{

    int i;
    int randValue = 0;
    int array[7] = {0}; // initialize array counters to 0

    srand( (unsigned)time( NULL ) ); // initialize rand() function

    for (i=0; i<MAX_RAND_NUMBERS; i++)
    {
         randValue = rand()%7;

         array[randValue]++;
    } // end for 


    printf("total number of random numbers (limited range: 0...6): %d\n", MAX_RAND_NUMBERS );
    printf("Number of times each of the limited range numbers occurred is:\n");
    for (i=0; i<7; i++)
    {
        printf("number: %d, occurrence count: %d\n",i,array[i]);
    }    


    return(0);
} // end function: main

答案 1 :(得分:0)

首先,如上面评论中所述:

表示(i = 0; i <= 7; i ++)

它有一个错误,因为实际上,它从0开始并一直到7,包括7.这意味着你实际上有8个位置(0 - > 7)而不是(0 - &gt; 6),这是你想要达到的目标。所以它应该是:

表示(i = 0; i <7; i ++)

然而,这不是主要问题。你在问题中说:

  

我试图计算在给定数组中出现0-6的数字的次数,该数组具有从随机数生成器生成的值

在以下代码中:

for (i=0; i< 7; i++)
        array[i] = i;`

您的数组元素不是随机数,因为您为它们分配了非常确定的数字。更具体地说,您的数组将是这样的: [0,1,2,3,4,5,6]。

要为数组分配随机数,我会这样做:

srand(time(NULL));
for(i = 0; i < 7; ++i) {
    array[i] = rand()%7; // this will generate numbers in the range of [0,6]
}

好的,现在您可以随心所欲地获得随机数组。所以,让我们试着算一下。我会尝试实现一个幻影数组:

int apparition[7] = {0}; // this statement will initialize all values to 0
for(i = 0; i < 7; ++i) {
   apparition[array[i]]++;
}

上面的代码执行以下操作:它遍历数字数组,并且对于每个值,它增加特定的幻像数组元素。假设你有数组[i] = 6,那么幻影[6] = 1,所以你计算了一个幻影。

您的代码:

    if(i==48){zero++;}

 else{if(i==49){one++;}

else{if(i==50){two++;}

 else{if(i==51){three++;}

 else{if(i==52){four++;}

else{if(i==53){five++;}

else{if(i==54){six++;}

我想你认为48是0的ASCII表示,对吗? 这是不正确的,因为你在那张表中看到的0是&#39; 0&#39; 0这实际上是一个char值,而不是一个整数值。 相反,你应该做的

if(array[i] == 0) {zero++};

如果您选择实现幻影阵列,可以像这样打印:

for(i = 0; i < 7; ++) {
    printf("%d appears: %d times\n", i, apparition[i]);
}

希望它有所帮助: - )