我想计算数组中每个元素的频率并打印出来,但是我不想计算已经计算的数字。
下面是我的代码
int main()
{
int i, j, n, f = 0, count = 1;
scanf("%d", &n);
int a[n];
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
for(i = 0; i < n; i++)
{
for(j = i + 1; j < n; j++)
{
if(a[i] == a[j] && a[j] != '\0')
{
f = 1;
count++;
a[j] = '\0';
}
}
if(f == 1)
printf("%d %d\n", a[i], count);
else if(a[i] != '\0')
printf("%d %d\n", a[i], count);
count = 1 ;
f = 0;
}
}
当我将输入作为0
时,我的输出失败。例如,假设
我的输入由八个值组成
7 5 6 7 3 0 5 0
对于上述输入,我没有获得0
的频率,但是对于其余元素,我的频率为
7 2
5 2
6 1
3 1
但是对于0
为什么我没有得到频率?
该如何纠正?
答案 0 :(得分:0)
您的代码不适用于零的原因是您没有计算'\ 0'{if(a[i]==a[j]&&a[j]!='\0')
}
中的元素
但是ascii值为NULL,即'\ 0'为0 (http://www.asciitable.com),因此您不算零,也不显示任何内容。
而不是为您访问的人保留'\ 0',而是保留一个负数(如果您不使用它的话)。
答案 1 :(得分:0)
if(a[i]==a[j]&&a[j]!='\0')
{
f=1;
count++;
a[j]='\0';
a []是整数,您要存储转换为0的字符'\ 0'。
要解决此问题,您必须首先计算零的数量,然后计算其他数字。