#arrays #c
Вопрос:
Проблема: Распечатайте уникальные элементы из массива. Пример: У нас есть {1,2,3,2,4,5,5,6], результат будет {1,2,3,4,5,6}.
Мне удается распечатать только {1,3,4,6}. Вот мой код:
#include <stdio.h>
void input(int a[], int n);
void show(int a[], int n);
int main()
{
int n, i;
printf("Enter number of elements: "); scanf("%d", amp;n);
int a[n];
input(a,n);
printf("nArray before change!n");
show(a,n);
printf("n----------------------------------------");
printf("nArray after change!n");
int b[101];
for(i=0; i<101; i )
{
b[i] = 0;
}
for (i=0; i<n; i )
{
b[a[i]] ;
}
for(i=0; i < n; i )
{
int j = 0;
if (b[a[i]] == 1)
{
printf("%d ", a[i]);
}
}
return 0;
}
//------------------------------------------------------------------------------
void input(int a[], int n)
{
int i;
for(i=0; i < n; i )
{
printf("a[%d] = ", i);
scanf("%d", amp;a[i]);
}
}
void show(int a[], int n)
{
int i;
for(i=0; i < n; i )
{
printf("%d ", a[i]);
}
}
В приведенных выше кодах я использую массив b[] в качестве счетчика для подсчета наличия каждого элемента. Я остановился на том, что не могу печатать элементы, которые появляются более одного раза. У тебя есть какая-нибудь идея, как это взломать ? Я благодарю вас.
Комментарии:
1.
if (b[a[i]] == 1)
->if (b[a[i]] >= 1)
2. Это приведет к результату, отличному от примера, потому что при этом будут выведены все элементы в массиве
3. С чего бы это? Все остальные
b
значения должны быть равны 0. Это основной смысл алгоритма. Нет? Ты пробовал это сделать?4. Если это «>=1» вместо «==1», он также выведет время элемента n (n-счетчик наличия этого элемента). Но можете ли вы придумать какую-нибудь лучшую идею для решения этой проблемы ?
5. @QuanLeAnh Вам действительно нужно проверить
if (b[a[i]] >= 1)
, а затем установитьb[a[i]] = 0;
, когда условие истинно. На самом делеb
массиву не нужно подсчитывать количество вхождений. Это просто должно быть 1, если число находится в массиве, и 0 в противном случае.
Ответ №1:
#include <stdio.h>
void input(int a[], int n);
void show(int a[], int n);
int main(){
int i=0,j,k=0,n;
int a[10];
int b[10];
printf("Enter number of elements: "); //number of elements you want to store.
scanf("%d", amp;n);
input(a,n);
printf("nArray before change!n");
show(a,n);
//removing duplicate elements from array.
for(i=0; i<n ; i ){
for(j=i-1 ; j>=0 ; j--)
if(a[j]==a[i])
goto down;
b[k ] = a[i]; // storing unique elements in array b.
down: ;
}
printf("n----------------------------------------");
printf("nArray after change!n");
show(b , k);
return 0;
}
//------------------------------------------------------------------------------
void input(int a[], int n){
for(int i=0; i < n; i )
scanf("%d", amp;a[i]);
}
void show(int a[], int n){
for(int i=0; i < n; i )
printf("%d ", a[i]);
}