(一)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++的编程题和其 ...
随机推荐
- 简单的windows作业管理(自己也没弄透彻)
先把代码贴出来,以后有时间再研究!简单的说,作业就相当于沙箱,可以使程序在一定范围内活动. #include "stdafx.h"#include "windows.h& ...
- python metaclass(元类)
metaclass(元类) 一.创建类的执行流程 二.元类的认识 什么是元类呢?在Python3中继承type的就是元类 二.元类的示例 方式一: # 方式一 class MyType(type): ...
- vsftpd 被动模式与主动模式
vsftpd 被动模式与主动模式 VSFTP文件与目录/usr/sbin/vsftp vsftp的主程序/etc/rc.d/init.d/vsftp vsftp的启动脚本/etc/vsftpd/vsf ...
- 11-16网页基础--HTML
网页制作部分主要讲解三大部分: 1.HTML 超文本标记语言( 全称:Hyper Text Markup Language) 专门编辑静态网页 2.CSS 网页美化:是HTML控制的 ...
- 部署和调优 3.1 dns安装配置-1
安装配置DNS服务器 装一个bind,首先搜一下. yum list |grep bind bind.x86_64 我们安装这个 安装 yum install bind.x86_64 -y 看一下 ...
- Struts2 结合 Freemarker 实例
Freemarker 是一个不依赖 web 容器的模板引擎,一个基于模板生成文本输出的工具.其工作的原理如下图: freemarker 不是一个 web 应用的框架,而适合作为 web 应用的一个组 ...
- day70-oracle PLSQL_01基本语法
PLSQL是一种程序,和java一样都是一种程序. sql developer是基于java的jdbc连接数据库.根据java的jdbc,只要有数据库的驱动,就可以连接这个数据库.这个工具默认不需要任 ...
- 生产者与消费者-1:N-基于list
一个生产者/多个消费者: /** * 生产者 */ public class P { private MyStack stack; public P(MyStack stack) { this.sta ...
- win10右击windows键没有反应解决方案(1707版本)
按Win+R打开运行,输入“regedit”打开注册表编辑器. 2.在“HKEY_CLASSES_ROOT”主键下找到“linkfile”或者".lnkfile"字符串值项,在右侧 ...
- Android之对话框Dialog
首先是确认对话框 //确认对话框 private void showLog1() { AlertDialog.Builder dialog = new AlertDialog.Builder(this ...