如果给定数组的元素值偏小,不如考虑用全数组,描述如下:
// 元素最大值不会超过MAX-1
#define MAX 101
// 保存元素出现次数,初始化为0。
ulong count_arr[MAX] = {0};
void func(int arr[], uint len) {
int i;
for i->len
++count_arr[i];
}
// ...
// print
int i;
for i->MAX
if (count_arr[i] > 0)
printf("%d: %u\n", i, count_arr[i]);
如果元素的最大值比较大(比如说100000,100000000等),那么就得另外想办法了。
个人觉得还是需要遍历吧,除非你先把该数组排序,那样的话统计起来就不需要遍历整个数组了,对于一个无规则的数组,我想不遍历是不可能统计出来的吧。其实像这类问题,单个的计算而已的话,就没什么好担心了,主要是函数调用的话才会比较耽误时间,是程序炮得慢,对于这样的情况,一般可以先对其归类分组,再去统计,也就是说先对它处理好,把结果存储起来,调用的时候直接调用存储的数据而不用每次都重新去统计。
#include
int
main()
{
char
ch[]="hello
world!";
for
(int
i=0;ch[i]!='\0';i++)
{
if
('o'==ch[i])
{
printf("n:%d\n",i+1);//搜索字符'o'都在第几个出现
}
}
return
0;
}//按你的标题给你个例子,其它自己搞定!~