(一)ByteDance编程题
题目:
公司的程序员不够用了,决定把产品经理都转变为程序员以解决开发时间长的问题。
在给定的矩形网格中,每个单元格可以有以下三个值之一:
值0代表空单元格
值1代表产品经理
值2代表程序员
每分钟,任何与程序员(在4个正方向上)相邻的产品经理都会变成程序员。
返回直到单元格中没有产品经理为止所必须经过的最小分钟数。
如果不可能,返回-1.
输入描述:
不固定多行(行数<=10),每行是按照空格分割的数字(不固定,每行数字个数<=10)
其中每个数组项的取值仅为0、1、2三种
(读取时可以按行读取,直到读取到空行为止,再对读取的所有行做转换处理)
输出描述:
如果能将所有产品经理变成程序员,则输出最小的分钟数。
如果不能够将所有的产品经理变成程序员,则返回-1。
示例1
输入:
0 2
1 0
输出:
-1
示例2
输入:
1 2 1
1 1 0
0 1 1
输出:
3
示例3
输入:
1 2
2 1
1 2
0 1
0 1
1 1
输出:
4
我的程序:
1 import java.util.Scanner; 2 3 public class Main { 4 public static void main(String[] args){ 5 boolean flag=false; 6 int sum=0; //标记变化次数 7 String a =null; 8 Scanner in=new Scanner(System.in); 9 String arr=in.nextLine(); 10 int p=arr.replace(" ","").length(); 11 while(in.hasNextLine()){ //如果下行不为空行 12 a=in.nextLine(); //a继续接收当前行 13 if(a.length() == 0){ //如果a串为回车符,则跳出循环 14 break; 15 } 16 arr+=a; //把输入的数字存储到一个字符串arr中 17 } 18 19 //将空格去掉 20 arr=arr.replace(" ",""); 21 22 //把字符串arr存到字符数组array中 23 char []array=arr.toCharArray(); 24 25 //判断字符串arr中1的前后3、1个位置是否为2,其中排除掉左边的数, 26 // 无前1,右边的数,无后1,左边的数为能被列数整除,右边的数即为(当前位置+1)能被列数整除 27 while(true){ 28 flag=false; 29 for(int i=0;i<arr.length();i++){ 30 if(arr.charAt(i)=='1'){ 31 if((i+1)%p==0){ //除去与后一号比较的情况 32 if( (i-p)>=0 ){ 33 if(arr.charAt(i-p)=='2'){ 34 array[i]='2'; //把字符数组array中的该位置的1变为2 35 flag=true; 36 } 37 } 38 if((i+3)<arr.length()){ 39 if(arr.charAt(i+p)=='2'){ 40 array[i]='2'; //把字符数组array中的该位置的1变为2 41 flag=true; 42 } 43 } 44 if((i-1)>=0){ 45 if(arr.charAt(i-1)=='2'){ 46 array[i]='2'; //把字符数组array中的该位置的1变为2 47 flag=true; 48 } 49 } 50 }else { 51 if( (i-p)>=0 ){ 52 if(arr.charAt(i-p)=='2'){ 53 array[i]='2'; //把字符数组array中的该位置的1变为2 54 flag=true; 55 } 56 } 57 if((i+3)<arr.length()){ 58 if(arr.charAt(i+p)=='2'){ 59 array[i]='2'; //把字符数组array中的该位置的1变为2 60 flag=true; 61 } 62 } 63 if((i+1)<arr.length()){ 64 if(arr.charAt(i+1)=='2'){ 65 array[i]='2'; //把字符数组array中的该位置的1变为2 66 flag=true; 67 } 68 } 69 if(i%p==0){ //除去与前一号比较的情况 70 continue; 71 } 72 if((i-1)>=0){ 73 if(arr.charAt(i-1)=='2'){ 74 array[i]='2'; //把字符数组array中的该位置的1变为2 75 flag=true; 76 } 77 } 78 } 79 } 80 } 81 if(flag){ 82 sum++; //有1发生变化,sum加一次 83 }else { 84 break; 85 } 86 //把数组array赋值给arr 87 arr=new String(array); 88 } 89 if(sum!=0){ 90 System.out.println(sum); 91 }else { 92 System.out.println(-1); 93 } 94 } 95 }