uva 10813 (Traditional BINGO)



Algorithm used : Ad hoc, 2D array
long coding … but very easy…

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace  std;

void load_BINGO();
void ifMatchesThenPlaceIt(int num);
bool isGameOver();
void load_announced_numbers();


int BINGO[5][5];
int array[75];

int main(){
    freopen("inMe.txt","r",stdin);
    freopen("outMe.txt","w",stdout);
    
    int testCase;
    cin>>testCase;
    for(int tC = 1; tC<=testCase;tC++){ 
       
     load_BINGO();
    
     load_announced_numbers();
     
     for(int b=1;b<=75;b++){
      ifMatchesThenPlaceIt(array[b-1]);
      
      bool gameOver = isGameOver();
      if(gameOver){
        
         printf("BINGO after %d numbers announced\n",b);
         break;
      }
     }
    }
    return 0;
}

void load_BINGO(){
   for(int i=0;i<5;i++){
     for(int j=0;j<5;j++){
       if(i==2&&j==2)BINGO[2][2] = 0;
       else{
         cin>>BINGO[i][j];
       }
     }
   }     
}

void ifMatchesThenPlaceIt(int num){
   bool found = false;
   for(int i=0;i<5;i++){
    for(int j=0;j<5;j++){
      if(num==BINGO[i][j]){
        BINGO[i][j] = 0;
        found = true;
        break;
      }
    }
    if(found)break;
   }

}

bool isGameOver(){
     int sum = 0;
     for(int j=0;j<5;j++)sum += BINGO[j][j];
     if(sum==0)return true;
     sum = 0;
     for(int j=0;j<5;j++)sum += BINGO[j][4-j];
     if(sum==0)return true;
     
     for(int i=0;i<5;i++){
     sum =0;
      for(int j=0;j<5;j++)sum += BINGO[i][j];
      //searching match in rows...
      if(sum==0)return true;
      sum = 0;
      for(int j=0;j<5;j++)sum += BINGO[j][i];//searching match in columns...
      if(sum==0)return true;
    }
    
     
     return false;
}

void load_announced_numbers(){
    for(int i=0;i<75;i++)cin>>array[i];
}

Tagged: , ,

Did it help you ....?