刚完事的快手笔试题
主要是最后一道,题目大意是给一个字符串[[.,.,.,*,*],[*,*,*,*,*],[*,.,*,*,.]],其中.表示可用工位,*表示不可用工位,要求两个相邻的可用工位只有一个可用,问最后有几个可用工位
思路是,先将字符串转换为字符数组,然后判断是否有相邻可用的工位(包括上下相邻,左右相邻),如果有则将其相邻工位变为不可用状态,最后统计矩阵中所有可用工位数即可
代码如下
package Test; import java.util.Scanner; public class Text3 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String a =new String(); a=sc.next(); char[] b=a.toCharArray(); int m=0;//行数 for(int i=0;i<b.length;i++) { if(b[i]==']') m++; } m=m-1; int n=0;//列数 for(int i=0;i<b.length;i++) { if(b[i]==',') n++; } n=(n+1)/m; char[][] c=new char[m][n];//标准矩阵 int p=0;//列指针 int q=0;//行指针 for(int i=0;i<b.length;i++) { if(b[i]=='*'||b[i]=='.') { c[q][p]=b[i]; if(p<n-1) p++; else if(q<m-1){ q++; p=0; } } } for(int i=0;i<m-1;i++) { for(int j=0;j<n-1;j++) { if(c[i][j]=='.') { c[i][j+1]='*'; c[i+1][j]='*'; } } } int G=0;//最大员工数 for(int i=0;i<m;i++) { for(int j=0;j<n;j++) { if(c[i][j]=='.') G++; } } System.err.println(G); } }很难受的是我交的时候还没有这么完善,我当时只考虑了3个相邻的情况,忘记考虑2个相邻的情况(我也没注意到,给的两个测试示例都跑通了,那还正好是3个相邻的情况,没有2个相邻的情况)
提交上去发现测试用例一个没过,我瞬间就懵了,啥玩意啊?咋回事啊?这咋办啊?
结果我检查了半天,还是没想起来忘考虑啥了
最后我神奇的在代码下注释写了自己的思路过程以及疑惑,并表示我没有错,错的是世界(JOJO我不做人啦!)
现在再想想好想找个地缝钻进去(大佬我错了)。
#快手笔试##快手##笔试题目#