题目有坑,我说怎么连用例都看不懂了 原来,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; } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)