该程序用于计算每个唯一元素的出现次数。 输出是:
程序:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *input;
int n,c;
printf("Enter the number of elements in the array:");
scanf("%d",&n);
input = (int *) malloc(n*sizeof(int));
printf("Enter %d elements \n",n);
for(c=0; c<n; c++)
scanf("%d",input+c);//POINTER NOTATION
if (sizeof(input) == 0) return 0;
int prev = input[0];
int count = 1;
int i;
int ARRAYSIZE = sizeof(input) / sizeof(int);
for (i = 1; i < ARRAYSIZE; i++)
{
if (input[i] == prev)
{
count++;
}
else
{
printf("%d=%d ", prev, count);
prev = input[i];
count = 1;
}
}
printf("%d=%d\n", prev, count);
free(input);
return 0;
}
输入数组中的元素数:10
输入10个元素
1 1 1 1 1 2 2 3 3 6
1 = 1
这里我输入了1次(5次),2次(2次),3次(2次)和6次(一次) 但正如你所看到的,它只给出了1 = 1(1次,但我输入了1次5次。) 有人可以帮帮我吗?感谢。
答案 0 :(得分:1)
你不需要这个:
int ARRAYSIZE = sizeof(input) / sizeof(int);
使用n
代替ARRAYSIZE
。
sizeof(input)
返回指针input
的大小,而不是数组的大小。 for
循环未执行,输出来自外部printf
。
答案 1 :(得分:1)
您的程序仅适用于一些小改动。
#include <stdio.h>
#include <stdlib.h>
int main() {
int *input;
int n, c;
printf("Enter the number of elements in the array:");
scanf("%d", &n);
input = malloc(n * sizeof(int));
printf("Enter %d elements \n", n);
for (c = 0; c < n; c++)
scanf("%d", input + c);//POINTER NOTATION
int prev = input[0];
int count = 1;
int i;
int ARRAYSIZE = n;
for (i = 1; i < ARRAYSIZE; i++) {
if (input[i] == prev) {
count++;
}
else {
printf("%d=%d ", prev, count);
prev = input[i];
count = 1;
}
}
printf("%d=%d\n", prev, count);
free(input);
return 0;
}
测试
Enter the number of elements in the array:10
Enter 10 elements
1 1 1 1 1 2 2 3 3 6
1=5 2=2 3=2 6=1
Process finished with exit code 0