繁体   English   中英

我如何获取每列fron 2D数组的总和并将其保存到C中的1D数组

[英]How can i get sum of each column fron 2D Array and save it to 1D array in C

使用第一个函数时,我用0(表示用户不是朋友,或1表示他们是朋友)填充5x5数组。第二个函数计算每个用户的朋友。第三个函数计算并返回用户之间的常见朋友。最后一个问题功能,它必须计算每个用户的朋友并将其保存在一维数组中,然后对数组进行冒泡短路。

谁能帮我找出上一个函数出了什么问题

友情数组是

01100
10111
11010
01100
01000

#include <stdio.h>
#include <stdlib.h>

/* function declaration */
void loadMatrix (int **F, int size);
int findFriends (int **F, int size, int user);
int commonFriends (int **F, int size, int user1, int user2);
void sortUsers (int **F, int size, int *S);

int main()
{
    int **matrixF; /* friendship array */
    int *matrixS;  /* sum of each user array */
    int num_users; /* users number */
    int i, j;

    printf("Give number of users: ");
    scanf("%d", &num_users);

    /* allocate memory for array */
    matrixF = (int **) malloc(num_users * sizeof(int *));
    if (!matrixF)
    {
        printf("Memory allocation error!\n");
        exit(1);
    }

    for (i = 0; i < num_users; ++i)
    {
        matrixF[i] = (int *) malloc(num_users * sizeof(int));
        if (!matrixF[i])
        {
            printf("Memory allocation error!\n");
            exit(1);
        }
    }

    loadMatrix(matrixF, num_users);


    for (i=0; i<num_users; ++i)
    {
        printf("Number of friends of user %d: %d\n", i, findFriends(matrixF, num_users, i));
    }

    /* common friends */
    for (i=0; i<num_users; ++i)
    {
        for (j=0; j<i; ++j)
        {
            printf("Number of common friends of %d and %d: %d\n", i, j,  commonFriends(matrixF, num_users, i, j));
        }
    }

    matrixS = (int *)malloc(num_users * sizeof(int));
    if (!matrixS)
    {
        printf("Memory allocation error!\n");
        exit(1);
    }

    sortUsers(matrixF, num_users, matrixS);

    /* bubble short */
    for (i=0; i<num_users; ++i)
    {
        printf("%d friends.\n", matrixS[i]);
    }

    return 0;        
}

void loadMatrix (int **F, int size)
{
    int i, j;

    for (i=0; i<size; i++)
        for (j=0; j<size; j++)
        {
            do
            {
                printf(" user%d is friend with user%d: ", i, j);
                scanf("%d", &F[i][j]);
                if ((F[i][j]<0) || (F[i][j]>1 )) printf("H timi prepei einai 0 i 1 . ");
            }
            while ((F[i][j]<0) || (F[i][j]>1));  /*please enter 0 or 1*/
        }
}


int findFriends (int **F, int size, int user) {

    int  j;
    int sum=0;

    for(j=0; j<size; j++)
    {
        sum+=F[user][j];
    }
    return (sum);
}


int commonFriends (int **F, int size, int user1, int user2) {

    int j;
    int counter=0;

    for (j=0; j<size; j++)
    {
        if ((F[user1][j]==1)&&(F[user2][j]==1))
            counter++;
    }
    return (counter);
    system("pause");
}

void sortUsers (int **F, int size, int *S)
{
    int  i, j, temp;
    int sum=0;

    for(i=0; i<size; i++)
    {
        for(j=0; j<size; j++)
            sum+=F[i][j];
    }
    S[i]=sum;

    printf("%d\t", S[i]);
    for(i=0; i<size; i++)
    {
        S[i]=sum;
    }

    for (i=1; i<size; i++)
    {
        for (j=0; j<size-1; j++)
        {
            if (S[j]>S[j+1])
            {
                temp = S[j];
                S[j] = S[j+1];
                S[j+1] = temp;
            }
        }
    }
}

我只是找出答案

void sortUsers (int **F, int size, int *S) {

int  i, j, temp, user;
int sum;  

for (i=0; i<size; i++){
   sum=0;
   for (j=0; j<size; j++)
   S[i]=(sum+=F[i][j]);

  }

   for (i=0; i<size; i++)
   printf("%d\t", S[i]);






  for (i=1; i<size; i++) {
  for (j=0; j<size-1; j++) {
     if (S[j]>S[j+1]) {
        temp = S[j];
        S[j] = S[j+1];
        S[j+1] = temp;
     }
  }
  }



  system("pause");


 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM