【发布时间】:2019-01-25 13:57:00
【问题描述】:
你想显示一个随机数组的重复元素,其大小可以由用户指定。我在输出中遇到的问题是,该函数正在打印一个重复的数字,它重复的次数与它重复的次数一样多,但我只想打印一次。 这是我的代码和前者之后的输出:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int array_size = 0;
int *my_array;
int i = 0;
printf("Enter the size of the array:\n");
scanf("%d",&array_size);
my_array = malloc(array_size * sizeof my_array[0]);
if(NULL == my_array) {
fprintf(stderr,"MEMORY ALLOLCATION FAILED \n");
return EXIT_FAILURE;
}
for(i=0;i<array_size;i++){
my_array[i] = rand()%array_size;
}
printf("What's in the array:\n");
for(i = 0;i<array_size;i++){
printf("%d ",my_array[i]);
}
printf("\n");
display_repeats(my_array, array_size);
free(my_array);
return EXIT_SUCCESS;
}
void display_repeats(int *a,int n){
int *repeats;
repeats = malloc(n * sizeof repeats[0]);
int i=0;
int j=0;
int count = 0;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(a[i] == a[j]){
count++;
}
}
if(count>1){
repeats[i] = count;
printf("%d occurs %d times\n",a[i],repeats[i]);
}
count = 0;
}
free(repeats);
}
这是我得到的输出
Enter the size of the array:
5
What's in the array:
3 1 2 0 3
3 occurs 2 times
3 occurs 2 times
我希望“3 发生 2 次”打印一次。 请帮忙!
【问题讨论】:
-
您的循环在第二次达到“3”时捕获 - 尝试保存您已经找到的所有元素,如果重复则忽略它们
-
@DavidWinder 你能详细说明一下吗:)?也许给我一些代码!
-
方法是问题所在 - 您计算出现次数的次数与它们在数组中出现的次数一样多(如果出现多次)。您可以先对数组进行排序,然后嵌套循环方法将起作用,前提是您每次找到匹配项时添加一个 i++。
-
请使用一些代码作为答案!我是 C 的新手,所以这可能对我有帮助
-
你在课堂上学习过任何类型的排序吗?如果你这样做了,那么最好你自己实现那个位并询问你是否卡住了。
标签: c arrays linux pointers memory