Cod sursa(job #119219)

Utilizator mentment nutzu ment Data 30 decembrie 2007 02:17:50
Problema Jocul Flip Scor 20
Compilator c Status done
Runda Arhiva de probleme Marime 2.74 kb
#include <stdio.h>
#include <stdlib.h>

#define MAX 15
#define MAXLEN 1024

#define FLIP_IN    "flip.in"
#define FLIP_OUT   "flip.out"

int ment[MAX][MAX];          // matricea cul
int n, m;                    // n linii, m coloane

int main(void){
int i, j, k, l;
FILE *fp;
char line[MAXLEN];
int inv_l=0;
int inv_c=0;

printf("flipfukr v0.1 by ment\nw00t w00t w00t w00t w00t w00t\n");

if ((fp = fopen(FLIP_IN, "r")) == NULL) {
          printf("nu pot deschide %s\n", FLIP_IN);
          exit(1);
          }

// citim N SI M DAAAAAAAAAAAAAAAAAa
fgets(line, MAXLEN, fp);
if(!(sscanf(line, "%d %d", &n, &m) > 0)) {
                  printf("nu gasesc n/m in %s\n", FLIP_IN);
                  exit(1);
                  }


printf("n = %d\nm= %d\n", n, m);

// incepem sa citim matricea NEGRULE W00T!
for(i=0; i<n; i++){
         for(j=0; j<m; j++){
                  int value;
                  if(fscanf(fp, "%d", &value) != 1){
                                break;
                                }
                  ment[i][j] = value;
                  }
}

fclose(fp); // am terminat cu FLIP_IN

afisare_matrice();

int S;
// testam pa linii sumele etc
linii_begin:
            
for(i=0; i<n; i++){
         inv_l=0;
         S=0;
         for(j=0; j<m; j++) S+= ment[i][j];
         
         if(S<0){
                 for(j=0; j<m; j++) ment[i][j] = ~ment[i][j]+1;
                 printf("\npa linia %d S = %d !\n", i+1, S);                 
                 inv_l=1;
                 }
         if(inv_l) break;
         }

if(inv_l) goto linii_begin;
         
afisare_matrice();         

// testam pa coloane
for(j=0; j<m; j++){
         inv_c=0;
         S=0;
         for(i=0; i<n; i++) S+= ment[i][j];
         
         if(S<0){
                 for(i=0; i<n; i++) ment[i][j] = ~ment[i][j]+1;
                 printf("\npa coloana %d S = %d !\n", j+1, S);                  
                 inv_c=1;
                 }
         if(inv_c) break;
         }

if(inv_c) goto linii_begin;

afisare_matrice();

int Suma=0;

for(i=0; i<n; i++){
         for(j=0; j<m; j++){
                   Suma+= ment[i][j];
                   }
         }
         
printf("%d\n", Suma);

if ((fp = fopen(FLIP_OUT, "w")) == NULL) {
          printf("nu pot crea/scrie in %s\n", FLIP_OUT);
          exit(1);
          }
          
fprintf(fp, "%d\n", Suma);          

fclose(fp); // am terminat si cu FLIP_OUT

return 0;   
}

afisare_matrice(){
int i, j;
// afisam matricea \o/
printf("-----------------------------------\n");
for(i=0; i<n; i++){
         for(j=0; j<m; j++){
                  printf("%d ", ment[i][j]);
                  }
         printf("\n");
         }
}