(一)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
我的程序:
import java.util.Scanner;
public class Main {
public static void main(String[] args){
boolean flag=false;
int sum=0; //标记变化次数
String a =null;
Scanner in=new Scanner(System.in);
String arr=in.nextLine();
int p=arr.replace(" ","").length();
while(in.hasNextLine()){ //如果下行不为空行
a=in.nextLine(); //a继续接收当前行
if(a.length() == 0){ //如果a串为回车符,则跳出循环
break;
}
arr+=a; //把输入的数字存储到一个字符串arr中
}
//将空格去掉
arr=arr.replace(" ","");
//把字符串arr存到字符数组array中
char []array=arr.toCharArray();
//判断字符串arr中1的前后3、1个位置是否为2,其中排除掉左边的数,
// 无前1,右边的数,无后1,左边的数为能被列数整除,右边的数即为(当前位置+1)能被列数整除
while(true){
flag=false;
for(int i=0;i<arr.length();i++){
if(arr.charAt(i)=='1'){
if((i+1)%p==0){ //除去与后一号比较的情况
if( (i-p)>=0 ){
if(arr.charAt(i-p)=='2'){
array[i]='2'; //把字符数组array中的该位置的1变为2
flag=true;
}
}
if((i+3)<arr.length()){
if(arr.charAt(i+p)=='2'){
array[i]='2'; //把字符数组array中的该位置的1变为2
flag=true;
}
}
if((i-1)>=0){
if(arr.charAt(i-1)=='2'){
array[i]='2'; //把字符数组array中的该位置的1变为2
flag=true;
}
}
}else {
if( (i-p)>=0 ){
if(arr.charAt(i-p)=='2'){
array[i]='2'; //把字符数组array中的该位置的1变为2
flag=true;
}
}
if((i+3)<arr.length()){
if(arr.charAt(i+p)=='2'){
array[i]='2'; //把字符数组array中的该位置的1变为2
flag=true;
}
}
if((i+1)<arr.length()){
if(arr.charAt(i+1)=='2'){
array[i]='2'; //把字符数组array中的该位置的1变为2
flag=true;
}
}
if(i%p==0){ //除去与前一号比较的情况
continue;
}
if((i-1)>=0){
if(arr.charAt(i-1)=='2'){
array[i]='2'; //把字符数组array中的该位置的1变为2
flag=true;
}
}
}
}
}
if(flag){
sum++; //有1发生变化,sum加一次
}else {
break;
}
//把数组array赋值给arr
arr=new String(array);
}
if(sum!=0){
System.out.println(sum);
}else {
System.out.println(-1);
}
}
}
(一)ByteDance编程题的更多相关文章
- 算法是什么我记不住,But i do it my way. 解一道滴滴出行秋招编程题。
只因在今日头条刷到一篇文章,我就这样伤害我自己,手贱. 刷头条看到一篇文章写的滴滴出行2017秋招编程题,后来发现原文在这里http://www.cnblogs.com/SHERO-Vae/p/588 ...
- C算法编程题系列
我的编程开始(C) C算法编程题(一)扑克牌发牌 C算法编程题(二)正螺旋 C算法编程题(三)画表格 C算法编程题(四)上三角 C算法编程题(五)“E”的变换 C算法编程题(六)串的处理 C算法编程题 ...
- C算法编程题(七)购物
前言 上一篇<C算法编程题(六)串的处理> 有些朋友看过我写的这个算法编程题系列,都说你写的不是什么算法,也不是什么C++,大家也给我提出用一些C++特性去实现问题更方便些,在这里谢谢大家 ...
- C算法编程题(六)串的处理
前言 上一篇<C算法编程题(五)“E”的变换> 连续写了几篇有关图形输出的编程题,今天说下有关字符串的处理. 程序描述 在实际的开发工作中,对字符串的处理是最常见的编程任务.本题目即是要求 ...
- C算法编程题(五)“E”的变换
前言 上一篇<C算法编程题(四)上三角> 插几句话,说说最近自己的状态,人家都说程序员经常失眠什么的,但是这几个月来,我从没有失眠过,当然是过了分手那段时期.每天的工作很忙,一个任务接一个 ...
- C算法编程题(四)上三角
前言 上一篇<C算法编程题(三)画表格> 上几篇说的都是根据要求输出一些字符.图案等,今天就再说一个“上三角”,有点类似于第二篇说的正螺旋,输出的字符少了,但是逻辑稍微复杂了点. 程序描述 ...
- C算法编程题(三)画表格
前言 上一篇<C算法编程题(二)正螺旋> 写东西前还是喜欢吐槽点东西,要不然写的真还没意思,一直的想法是在博客园把自己上学和工作时候整理的东西写出来和大家分享,就像前面写的<T-Sq ...
- C算法编程题(二)正螺旋
前言 上一篇<C算法编程题(一)扑克牌发牌> 写东西前总是喜欢吐槽一些东西,还是多啰嗦几句吧,早上看了一篇博文<谈谈外企涨工资那些事>,里面楼主讲到外企公司包含的五类人,其实不 ...
- C算法编程题(一)扑克牌发牌
前言 上周写<我的编程开始(C)>这篇文章的时候,说过有时间的话会写些算法编程的题目,可能是这两天周末过的太舒适了,忘记写了.下班了,还没回去,闲来无事就写下吧. 因为写C++的编程题和其 ...
随机推荐
- DDD学习笔录——简介DDD的战略模式如何塑造应用程序的架构
前一篇,简单介绍了DDD战略模式的提炼问题域,这篇简单介绍它如何塑造应用程序的架构. 1.创建一个模型以解决领域问题 为每一个子域构建一个软件模型以处理领域问题并让软件与业务保持一致. 这个模型并非现 ...
- ping 127.0.0.1请求超时的解决办法?
转自:http://blog.51cto.com/dengyong/1429699 打开网络连接,你很有可能启用了虚拟wifi.若有无线网卡就把无线网卡关掉,然后本地连接那里(就是有线网卡的那个连接) ...
- 【271】IDL-ENVI二次开发
参考:String Processing Routines —— 字符串处理函数 01 STRING 返回字符串. 02 STRCMP 比较字符串,一样返回1,不一样返回0,默认大小写敏感. ...
- 第四天:servlet的生命周期和一些细节问题
1. servlet的生命周期: a) 流程 i. Web服务器首先会检查是否装载了该servlet的实例对象.如果装载了直接进行第四步. ii. 装载并创建该servlet的实例对象. ii ...
- Generalized Low Rank Approximation of Matrices
Generalized Low Rank Approximations of Matrices JIEPING YE*jieping@cs.umn.edu Department of Computer ...
- Ros学习topic——小海龟
ROS Topics 1.rqt_graph:创建一个显示当前系统运行情况的动态图形 安装 $ sudo apt-get install ros-<distro>-rqt $ sudo a ...
- cmake 编译安装方法
cmake版本3.7.2 1.根目录下./bootstrap 2.make 3.sudo make install
- ROS Learning-011 beginner_Tutorials (编程) 编写 ROS 话题版的 Hello World 程序(Python版)
ROS Indigo beginner_Tutorials-10 编写 ROS 话题版的 Hello World 程序(Python版) 我使用的虚拟机软件:VMware Workstation 11 ...
- IB使用
A:给控件添加方法或变量. 1.窗口上拖个控件 NSButton 2..点右上那张狗脸(Editor)对上的. 3.右键控件.拖到头文件中. 4 .选择加响应方法或变量.
- Entity Framework Tutorial Basics(19):Change Tracking
Change Tracking in Entity Framework: Here, you will learn how entity framework tracks changes on ent ...