【天梯赛】L1-104 九宫格(C++)
易忽略的错误:开始习惯性地看到n就以为是n*n数组了,实际上应该是9*9的固定大小数组,查了半天没查出来
题面
L1-104 九宫格 - 团体程序设计天梯赛-练习集
代码实现
#include<bits/stdc++.h>
using namespace std;
//易错:开始习惯性地看到n就以为是n*n数组了
int main()
{int direct[8][2] = {{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};int n; cin>>n;vector<vector<int>>graph(9, vector<int>(9));//开始习惯性地看到n就以为是n*n数组了vector<int>res;int flag = 1;set<int>st;//全部放在一个大for中就好了for(int m=0; m<n; m++){//接收和检验每行for(int i=0; i<9; i++){for(int j=0; j<9; j++){cin>>graph[i][j];if(graph[i][j]<1 || graph[i][j]>9) flag = 0;//数字均为1~9st.insert(graph[i][j]); }if(st.size() != 9) flag = 0;//每行的检验st.clear();}//每列for(int j=0; j<9 && flag != 0; j++){for(int i=0; i<9; i++){st.insert(graph[i][j]);}if(st.size()!=9){flag = 0; break;} }//每宫格for(int i=1; i<9 && flag != 0; i+=3){for(int j=1; j<9 && flag != 0; j+=3)//每宫格的中心点{st.clear();st.insert(graph[i][j]);for(int k=0; k<8; k++){st.insert(graph[i+direct[k][0]][j+direct[k][1]]);}if(st.size()!=9){flag = 0; break;} }}st.clear();res.push_back(flag);flag = 1;}for(int i=0; i<res.size(); i++){cout<<res[i];if(i!=res.size()-1) cout<<endl;}return 0;
}