2020年1月13日 星期一

Traditional bingo

題目:
也是cpe的題目。

不過我寫的也是讀檔版。

解題思路:
其實就照著題目的意思去寫,每次讀數字都確認每行每列每斜排有沒有一條線。

程式碼:
#include <stdio.h>
#include "FileHandler.h"

int main()
{
 int bingo[5][5] = { 0 }, input[75], i_now = 0, row[5] = { 0 }, column[5] = { 0 }, tilt[2] = {1,1},check=0;
 row[2] = 1, column[2] = 1;
 char *str = readAllTextFromFile("./bingo.txt");
 for (int i = 0; i < 5; i++)
 {
  for (int j = 0; j < 5; j++)
  {
   if (i == 2 && j == 2) continue;
   int n = 0;
   while (str[i_now] != ' '&&str[i_now] != '\n')
   {
    n = str[i_now] - '0' + n * 10;
    i_now++;
   }
   i_now++;
   bingo[i][j] = n;
  }
 }
 for (int i = 0; i < 75; i++)
 {
  int n = 0;
  while (str[i_now] != ' '&&str[i_now] != '\n'&&str[i_now]!=NULL)
  {
   n = str[i_now] - '0' + n * 10;
   i_now++;
  }
  i_now++;
  input[i] = n;
 }
 for (int i = 0; i < 75; i++)
 {
  for (int j = 0; j < 5; j++)
  {
   for (int k = 0; k < 5; k++)
   {
    if (input[i] == bingo[j][k])
    {
     row[j]++;
     column[k]++;
     if (j == k)
      tilt[0]++;
     else if (j + k == 4)
      tilt[1]++;
    }
   }
  }
  if (tilt[0] == 5 || tilt[1] == 5)
  {
   printf("BINGO after %d numbers announced\n", i + 1);
   check = 1;
   break;
  }
  else
  {
   for (int j = 0; j < 5; j++)
   {
    if (row[j] == 5 || column[j] == 5)
    {
     printf("BINGO after %d numbers announced\n", i + 1);
     check = 1;
     break;
    }
   }
  }
  if (check == 1)
   break;
 }
 system("pause");
 return 0;
}

沒有留言:

張貼留言