[英]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.