gpt4 book ai didi

c - 检查每个元素在数组中出现次数的函数

转载 作者:行者123 更新时间:2023-11-30 20:15:20 24 4
gpt4 key购买 nike

我正在创建一个函数,列出一个数组并说明每个元素出现的次数。

到目前为止,我自己想到的是我应该循环遍历数组,并且应该有一个计数器来跟踪它出现的次数,然后用第二个数组来对应地放置该计数器的值为第一个数组中的值。

但我无法找出一种算法来搜索每个值是否在循环内重复。

最佳答案

代码示例已经简化,并且有更多注释

以下是一些建议的步骤:
1) 假设 int a[] 已排序(为了便于计数)(升序或降序,无关紧要)。
2) 创建单独的数组以将找到的结果保存在
第一个一个,num[] 存储唯一值,并且
第二 cnt[] 存储找到的该值的数量。
3) 循环排序数组。
4) 在循环中,将唯一值和出现次数存储在 keep 数组中。

排序例程 qsort() 是一个概念,如果您刚刚开始,稍后您将了解它(现在不要分心)但是请注意在本示例中解决您的问题的部分,请查找注释“Look Here”。如上所述,它循环遍历数组,并存储有关数字何时更改以及每个数字有多少的信息。

这是一个小代码示例:

查看评论,了解设置计数器等时应注意的地方。

#include <stdio.h>
#define sizea 100 //to make variable declarations easier and consistent

int num[sizea];//unless array has all unique numbers, will never use this many
int cnt[sizea];//same comment

int cmpfunc (const void * a, const void * b);//DISREGARD for now (it just works)

int main(void)
{ //a[] is created here as an unsorted array...
int a[sizea]={1,3,6,8,3,6,7,4,6,9,0,3,5,12,65,3,76,5,3,54,
1,3,6,89,3,6,7,4,6,9,0,4,5,12,65,3,76,5,3,54,
1,9,6,8,3,45,7,4,6,9,0,89,5,12,65,3,76,5,3,54,
6,3,6,8,3,6,7,4,6,9,0,23,5,12,65,3,76,5,3,54,
1,3,6,90,3,6,7,4,6,9,0,5,5,12,65,3,76,5,3,54};

int i, j, ncount;

for(i=0;i<sizea;i++) cnt[i] = -1;
for(i=0;i<sizea;i++) num[i] = -999;

//sort array (AGAIN - DON'T spend time on this part, it just sorts the array)
qsort(a, sizea, sizeof(int), cmpfunc);

// a is NOW SORTED, in ascending order, now loop through...
j=0; //start num and cnt arrays at first element and set ncount to 1
num[j] = a[0];
cnt[j] = 1;
ncount = 1;//start off with at least one of the first number
//***Look Here***//
for(i=0;i<sizea-1;i++)//"sizea - 1" so we do not go past a[sizea-1] elements
{ //a has sizea elements, indexed from 0 to sizea-1
//or a[0] to a[99]
if(a[i+1] != a[i])
{
j++; //new unique number, increment num[] array
num[j] = a[i+1];
ncount = 1; //different number start over
cnt[j] = ncount;//initialize new cnt[j] with 1
}
else
{
cnt[j] = ++ncount; //increment cnt, apply it to array
}
}
i=0;

//We now have a list of unique numbers, and count of each one. Print it out
for(i=0;i<j;i++)
{
printf("number %d occurs %d times\n", num[i], cnt[i]);
}
getchar(); //so results will show.

return 0;
}
//Note num[j] and cnt[j] correspond to each other
//num contains a unique number
//cnt contains the number of occurrences for that number

int cmpfunc (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}

对于包含的数组示例,以下是使用此代码的结果:

enter image description here

关于c - 检查每个元素在数组中出现次数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20177496/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com