题目有坑,我说怎么连用例都看不懂了
原来,H 行 列
V 列 行
还是需要细心呀,大家
import java.util.Scanner;
public class Main {
static int[][] H;//竖
static int[][] V;//横
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t=0;//游戏次数
while(sc.hasNext()) {
int n=sc.nextInt();//正方形大小
int m=sc.nextInt();//边的数量
H=new int[10][10];
V=new int[10][10];
while(m-->0) {
char ch=sc.next().toCharArray()[0];//字符
int p=sc.nextInt();
int q=sc.nextInt();
if(ch=='H') H[p][q]=1; //坑呀:H为行,列
else if(ch=='V') V[q][p]=1; //V为列,行
}
if(t!=0) {
System.out.println();
System.out.println("**********************************");
System.out.println();
}
System.out.println("Problem #"+(++t));
System.out.println();
int sum=0,num=0;
for (int i = 1; i <= n-1; i++) {//边长
num=count(i,n);//计算长度为i的正方形的个数
if(num!=0) {
sum+=num;
System.out.println(num+" square (s) of size "+i);
}
}
if(sum==0) {
System.out.println("No completed squares can be found.");
}
}
}
private static int count(int k,int n) {
int number=0;
int flag=1;//flag=0不是正方形
for (int i = 1; i+k <= n; i++) {//i:1~n-k
for (int j = 1; j+k <= n; j++) {//j:1~n-k
flag=1;
for (int p = 0; p < k && flag==1; p++) {//上面那条边
if(H[i][j+p]==0) {
flag=0;
break;
}
}
for (int p = 0; p < k && flag==1; p++) {//左面那条边
if(V[i+p][j]==0) {
flag=0;
break;
}
}
for (int p = 0; p < k && flag==1; p++) {//右面那条边
if(V[i+p][j+k]==0) {
flag=0;
break;
}
}
for (int p = 0; p < k && flag==1; p++) {//下面那条边
if(H[i+k][j+p]==0) {
flag=0;
break;
}
}
if(flag==1) number++;
}
}
return number;
}
}