1 条题解
-
0
题意分析
题目要求模拟游戏的过程,给定一张卡片和一系列数字,判断玩家何时会赢得游戏(即卡片上出现个标记的行、列或对角线)。需要处理卡片数据的读取、数字的匹配以及胜利条件的判断。
解题思路
- 卡片表示:使用二维数组表示卡片,中心格子标记为特殊值(如)。
- 数字匹配:遍历宣布的数字序列,检查是否在卡片上存在,若存在则标记。
- 胜利条件检查:每次标记后,检查是否有行、列或对角线被完全标记(包括中心格子)。
实现步骤
- 读取输入:读取游戏数量,然后逐个处理每个游戏的卡片和数字序列。
- 初始化卡片:将卡片数据存储在二维数组中,中心格子特殊处理。
- 模拟游戏过程:
- 遍历数字序列,标记卡片上的对应数字。
- 每次标记后检查是否满足胜利条件。
- 输出结果:当满足胜利条件时,输出当前宣布的数字数量。
代码实现
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<algorithm> using namespace std; const int maxn = 8; int mat[ maxn ][ maxn ]; bool vis[ maxn ][ maxn ]; bool appear[ 85 ]; struct node{ int x,y; }num[ 105 ]; void init(){ memset( appear,false,sizeof( appear ) ); memset( vis,false,sizeof( vis ) ); vis[3][3] = true; } bool judge(){ int cnt; for( int i=1;i<=5;i++ ){ cnt = 0; for( int j=1;j<=5;j++ ){ if( vis[i][j]==true ) cnt++; else break; } if( cnt==5 ) return true;//row cnt = 0; for( int j=1;j<=5;j++ ){ if( vis[j][i]==true ) cnt++; else break; } if( cnt==5 ) return true;//col } cnt = 0; for( int i=1;i<=5;i++ ) if( vis[i][i]==true ) cnt++; else break; if( cnt==5 ) return true;//dia if( vis[1][5]==true&&vis[2][4]==true&&vis[4][2]==true&&vis[5][1]==true ) return true; return false; } int main(){ int n; scanf("%d",&n); while( n-- ){ init(); for( int i=1;i<=5;i++ ){ if( i!=3 ){ for( int j=1;j<=5;j++ ){ scanf("%d",&mat[i][j]); num[ mat[i][j] ].x = i; num[ mat[i][j] ].y = j; appear[ mat[i][j] ] = true; } } else{ for( int j=1;j<=2;j++ ){ scanf("%d",&mat[i][j]); num[ mat[i][j] ].x = i; num[ mat[i][j] ].y = j; appear[ mat[i][j] ] = true; } for( int j=4;j<=5;j++ ){ scanf("%d",&mat[i][j]); num[ mat[i][j] ].x = i; num[ mat[i][j] ].y = j; appear[ mat[i][j] ] = true; } } } int ans = 0; int in_num; bool flag = false; //printf("input\n"); for( int i=1;i<=75;i++ ){ scanf("%d",&in_num); if( flag==false ) ans++; if( appear[ in_num ]==true ){ vis[ num[ in_num ].x ][ num[ in_num ].y ] = true; if( judge()==true ){ flag=true; } } } printf("BINGO after %d numbers announced\n",ans); } return 0; }
- 1
信息
- ID
- 1303
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 4
- 已通过
- 1
- 上传者