让我们说我有一个颜色数组,其中数组中的数字代表不同的颜色,我试图找出每种颜色出现在该数组中的次数 这是我的代码: 我已经声明了这个函数所需的变量:
我理解这部分,只是创建数组
printf("Enter the color combination , separated by a space:\n");
for(i = 0; i<slots; i++){
scanf("%d", &correct[i]);
这一部分做了什么?
freq[i] = -1;
}
for(i=0; i<slots; i++){
count = 1;
for(j=i+1; j<slots; j++){
if(correct[i]==correct[j]){
count++;
freq[j]=0;
}
}
if(freq[i]!= 0){
freq[i] = count;
}
}
printf("Correct combination:\n");
for(i=0;i<slots;i++){
if(freq[i]!=0)
printf("The color %d appears %d time(s).\n", correct[i], freq[i]);
}
如果数组正确[] = {3,3,4,2,4,1,3}
输出结果为:
颜色3出现3次。
颜色1出现1次。
颜色2出现1次。
颜色4出现2次。
我只需要逐步解释代码如何工作
答案 0 :(得分:0)
我会尝试为您解释一下代码。:)
有两个大小相等的数组。
一个数组具有颜色值,例如
int correct[] = {3,3,4,2,4,1,3};
另一个数组称为freq
int freq[sizeof( correct ) / sizeof( *correct )];
相当于
int freq[7];
最后一个数组的所有元素最初都设置为-1(freq[i] = -1;
)
所以它也可以定义为
int freq[7] = { -1, -1, -1, -1, -1, -1, -1 };
然后在这些循环中
for(i=0; i<slots; i++){
count = 1;
for(j=i+1; j<slots; j++){
if(correct[i]==correct[j]){
count++;
freq[j]=0;
}
}
if(freq[i]!= 0){
freq[i] = count;
}
}
可以而且应该像
一样重写for(i=0; i<slots; i++)
{
if ( freq[i] == -1 )
{
count = 1;
for(j=i+1; j<slots; j++)
{
if(correct[i]==correct[j])
{
count++;
freq[j]=0;
}
}
freq[i] = count;
}
}
执行以下操作。
例如,对于i = 0,如果在数组的以下元素中找到值正确[0],则数组freq的相应元素被设置为0.
所以最初你有类似
的东西correct[] = { 3, 3, 4, 2, 4, 1, 3 };
freq[7] = { -1, -1, -1, -1, -1, -1, -1 };
执行i的内部循环等于0后,你将有
correct[] = { 3, 3, 4, 2, 4, 1, 3 };
freq[7] = { -1, 0, -1, -1, -1, -1, 0 };
^ ^
和值正确[0]遇到两次。所以变量count将等于3.它写在数组freq
你会得到
correct[] = { 3, 3, 4, 2, 4, 1, 3 };
freq[7] = { 3, 0, -1, -1, -1, -1, 0 };
然后,对于i等于1,内部循环被跳过(我正在考虑修改后的代码片段,因为我重写了它)。
如果我等于2,你将在执行内循环
之后correct[] = { 3, 3, 4, 2, 4, 1, 3 };
freq[7] = { 3, 0, -1, -1, 0, -1, 0 };
^
count等于2,其值将写入数组freq的第三个元素
correct[] = { 3, 3, 4, 2, 4, 1, 3 };
freq[7] = { 3, 0, 2, -1, 0, -1, 0 };
执行外循环后,您将拥有
correct[] = { 3, 3, 4, 2, 4, 1, 3 };
freq[7] = { 3, 0, 2, 1, 0, 1, 0 };
现在使用此循环
printf("Correct combination:\n");
for(i=0;i<slots;i++){
if(freq[i]!=0)
printf("The color %d appears %d time(s).\n", correct[i], freq[i]);
}
你会得到
The color 3 appears 3 time(s).
The color 4 appears 2 time(s).
The color 2 appears 1 time(s).
The color 1 appears 1 time(s).