刚完事的快手笔试题
主要是最后一道,题目大意是给一个字符串[[.,.,.,*,*],[*,*,*,*,*],[*,.,*,*,.]],其中.表示可用工位,*表示不可用工位,要求两个相邻的可用工位只有一个可用,问最后有几个可用工位
思路是,先将字符串转换为字符数组,然后判断是否有相邻可用的工位(包括上下相邻,左右相邻),如果有则将其相邻工位变为不可用状态,最后统计矩阵中所有可用工位数即可
代码如下
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我不做人啦!)
现在再想想好想找个地缝钻进去(大佬我错了)。
#快手笔试##快手##笔试题目#
查看20道真题和解析