(一)ByteDance编程题

题目:

公司的程序员不够用了,决定把产品经理都转变为程序员以解决开发时间长的问题。

在给定的矩形网格中,每个单元格可以有以下三个值之一:

0代表空单元格

1代表产品经理

2代表程序员

每分钟,任何与程序员(在4个正方向上)相邻的产品经理都会变成程序员。

返回直到单元格中没有产品经理为止所必须经过的最小分钟数。

如果不可能,返回-1.

输入描述:

不固定多行(行数<=10),每行是按照空格分割的数字(不固定,每行数字个数<=10

其中每个数组项的取值仅为012三种

(读取时可以按行读取,直到读取到空行为止,再对读取的所有行做转换处理)

输出描述:

如果能将所有产品经理变成程序员,则输出最小的分钟数。

如果不能够将所有的产品经理变成程序员,则返回-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 }

 

posted @ 2019-04-16 14:44  tendo  阅读(258)  评论(0编辑  收藏  举报