我得到了這個,但我似乎無法讓它發揮作用,嘗試了我能想到的一切。
#include <stdio.h>
#include <stdlib.h>
void alocare_vector(int *v, int nr, int elem)
{
int *v1;
if ((v1 = realloc(v, nr * sizeof(int))) == NULL)
{
printf("Memorie insuficienta");
free(v);
exit(EXIT_FAILURE);
}
v = v1;
v[nr - 1] = elem;
}
int main()
{
int a[100][100];
int n, *v = NULL, i, j, k, l, ok = 0, nr = 0;
printf("Number de elements n:");
scanf("%d", &n);
for (i = 0; i < n; i )
for (j = 0; j < n; j )
scanf("%d", &a[i][j]);
for (k = 0; k < n; k )
{
for (l = 0; l < n; l )
{
for (i = 0; i < n; i )
for (j = 0; j < n; j )
if (a[k][l] == a[i][j] && (k != i && l != j))
ok = 1;
if (ok == 0)
{
nr ;
alocare_vector(v, nr, a[k][l]);
}
ok = 0;
}
}
if (nr > 0)
{
printf("Elements:");
for (i = 0; i < nr; i )
{
printf("%d ", v[i]);
}
}
free(v);
}
基本上,我需要創建一個矩陣,并使用具有動態記憶體分配的陣列列印僅出現一次的元素。
uj5u.com熱心網友回復:
一個簡單的解決方法是將“int * v”宣告為全域變數并將函式修改為
alocare_vector(int nr, int elem)
現在使用哈希表您可以將數字存盤在陣列中,下面是您的實作只是一個位修改。
#include <stdio.h>
#include <stdlib.h>
int hash[1000]={0};
int * v=NULL;
void alocare_vector(int nr, int elem)
{
int *v1;
if ((v1 = (int*)realloc(v, nr * sizeof(int))) == NULL)
{
printf("Memorie insuficienta");
free(v);
exit(EXIT_FAILURE);
}
v = v1;
v[nr - 1] = elem;
}
int main()
{
int a[100][100];
int n, i, j, nr = 0;
printf("Number de elements n:");
scanf("%d", &n);
for (i = 0; i < n; i )
{
for (j = 0; j < n; j )
{
scanf("%d", &a[i][j]);
hash[a[i][j]];
}
}
for (i = 0; i < n; i )
{
for (j = 0; j < n; j )
{
if(hash[a[i][j]]==1)
{
nr ;
alocare_vector(nr, a[i][j]);
}
}
}
if (nr > 0)
{
printf("Elements:");
for (i = 0; i < nr; i )
{
printf("%d ", v[i]);
}
}
free(v);
}
uj5u.com熱心網友回復:
當呼叫你的函式時,你傳遞了一個指標的副本。因此,對指標的這個本地副本的任何修改都不會影響 main 中的副本。因此,您需要參考或指向 main 中的指標。
void alocare_vector(int **v, int nr, int elem)
{
...
*v = v1;
}
uj5u.com熱心網友回復:
在這里,您有暴力示例如何生成 2D 陣列的不同元素的陣列:
typedef struct
{
size_t length;
int data[];
}data_t;
data_t *add_element(data_t *arr, int element)
{
size_t newsize = arr ? arr -> length : 0;
arr = realloc(arr, newsize * sizeof(arr -> data[0]) sizeof(*arr));
if(arr)
{
arr -> length = newsize;
arr -> data[newsize - 1] = element;
}
return arr;
}
int isPresent(size_t rows, size_t cols, size_t vrow, size_t vcol, int (*array)[cols])
{
int val = array[vrow][vcol];
for(size_t row = 0; row < rows; row )
for(size_t col = 0; col < cols; col )
{
if(vcol == col && vrow == row) continue;
if(array[row][col] == val)
{
return 1;
}
}
return 0;
}
data_t *distinctElements(size_t rows, size_t cols, int (*array)[cols])
{
data_t *dist = NULL;
for(size_t row = 0; row < rows; row )
{
for(size_t col = 0; col < cols; col )
{
if(!isPresent(rows, cols, row, col, array))
{
data_t *tmp = add_element(dist, array[row][col]);
if(tmp) dist = tmp;
else { /* error handling */}
}
}
}
return dist;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/484617.html
