Pagini recente » Cod sursa (job #1481224) | Cod sursa (job #1456441) | Sandbox (cutiuţa cu năsip) | Cod sursa (job #705669) | Cod sursa (job #2197292)
#include<stdio.h>
#include<stdlib.h>
int nCols;
int nRows;
struct data{
int index;
int sum;
};
int computeTotalSum(int table[16][16]){
int sum = 0;
for(int i = 0; i < nCols; i++)
for(int j = 0; j < nRows; j++)
sum += table[j][i];
return sum;
}
int computeCollumnSum(int table[16][16], int coll){
int sumColl = 0;
for(int i = 0; i < nRows; i++)
sumColl += table[i][coll];
return sumColl;
}
int computeRowSum(int table[16][16], int row){
int sumRow = 0;
for(int i = 0; i < nCols; i++)
sumRow += table[row][i];
return sumRow;
}
int computeAproxAverage(struct data *array){
int sum;
int n = sizeof(array)/sizeof(array[0]);
for(int i = 0; i < n; i++){
sum += array[i].sum;
}
return sum/n;
}
int cmpfunc(const void *p, const void *q)
{
int l = ((struct data *)p)->sum;
int r = ((struct data *)q)->sum;
return (l - r);
}
void createArrayOfSumRow(struct data *arr, int table[16][16]){
for(int i = 0; i < nRows; i++){
arr[i].sum = computeRowSum(table, i);
arr[i].index = i ;
}
qsort(arr, nRows, sizeof(struct data), cmpfunc);
}
void createArrayOfSumColl(struct data *arr, int table[16][16]){
for(int i = 0; i < nCols; i++){
arr[i].sum = computeCollumnSum(table, i);
arr[i].index = i ;
}
qsort(arr, nCols, sizeof(struct data), cmpfunc);
}
void createArrayOfMinSumIndex(int dimArr,struct data *arr, int *idxArr, int *size, int cmp){
*size = 0;
for(int i = 0; i < dimArr; i++){
if(arr[i].sum < cmp){
idxArr[*size] = arr[i].index;
(*size)++;
}
}
//printf("\n%d", *size);
}
void modifieTableRow(int table[16][16], int *idxArr){
int n = sizeof(idxArr)/sizeof(idxArr[0]);
for(int i = 0 ; i < n-1; i++)
{for(int j = 0; j < nCols; j++)
table[idxArr[i]][j] = (-1) * table[idxArr[i]][j];
}
}
void modifieTableColl(int table[16][16], int *idxArr){
int n = sizeof(idxArr)/sizeof(idxArr[0]);
for(int i = 0 ; i < n-1; i++)
{for(int j = 0; j < nRows; j++)
table[j][idxArr[i]] = (-1) * table[j][idxArr[i]];
}
}
int main(){
FILE *input = fopen("flip.in", "r");
fscanf(input, "%d %d", &nRows, &nCols);
int table[16][16];
int indexRow[16];
int indexColl[16];
struct data sumRow[16];
struct data sumColl[16];
//int averageR;
//int averageC;
int sumMatrix = 0;
int coll = 0;
int row = 0;
//read table
for(int i = 0; i < nRows; i++)
for(int j = 0; j < nCols; j++){
fscanf(input, "%d", &table[i][j]);
}
//averageR = computeAproxAverage(sumRow);
//averageC = computeAproxAverage(sumColl);
createArrayOfSumRow(sumRow, table);//sumRow array
//find index of minim sumRow
createArrayOfMinSumIndex(nRows,sumRow, indexRow, &row, 0);
//modif row
modifieTableRow(table, indexRow);
createArrayOfSumColl(sumColl, table);//sumColl array
//find index of min sumColl
createArrayOfMinSumIndex(nCols, sumColl, indexColl, &coll, 0);
modifieTableColl(table, indexColl);
sumMatrix = computeTotalSum(table);
for(int i = 0; i < nRows; i++){
for(int j = 0; j < nCols; j++)
printf("%d ", table[i][j]);
printf("\n");
}
printf("%d", sumMatrix);
fclose(input);
return 0;}