我对C非常新鲜。目前我正在编写一个应该在数组中显示重复项的程序。程序读取(来自用户),N个数字(但是N <100),之后显示重复的数字。 我的代码工作,但我有显示问题。 例如,当它是5 elenets array numb [5] = {1,2,2,2,3}时,程序显示2三次,它应该显示2次。
#include <stdio.h>
int main ()
{
int n, i, j, numbers[100]={0};
printf("number of elements (max 100):");
scanf("%i", &n);
printf("enter elements:");
for (i = 0; i < n; i++)
{
scanf("%i", &numbers[i]);
}
for (i = 0; i < n; i++)
{
for j = i+1; j < n; j++)
{
if (numbers[i] ==numbers[j])
{
printf("duplicates:%i\n", numbers[i]);
}
}
}
}
答案 0 :(得分:1)
一旦numbers[i] ==numbers[j]
为真,您需要删除重复项(转移)或其他一些不再重复打印重复项的方法。所以为此写出逻辑。
这是我的代码编辑:
#include <stdio.h>
int main ()
{
int n, i, j,k, numbers[100]={0};
printf("number of elements (max 100):");
scanf("%i", &n);
printf("enter elements:");
for (i = 0; i < n; i++)
{
scanf("%i", &numbers[i]);
}
for (i = 0; i < n; i++)
{
for (j = i+1; j < n; j++)
{
if (numbers[j] ==numbers[j+1])//once true shift all elements by once
{
for(k=j; k<n; k++)//loop for shifting elemenst
numbers[k]=numbers[k+1];
j--;//again starts comparing from previous position
n--;// no of elements reduced
}
}
}
for(i=0; i<n ;i++)
printf("%d \n",numbers[i]);
return 0;
}
我希望它有所帮助。