我试图计算在给定数组中出现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);
}
答案 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]);
}
希望它有所帮助: - )