首页 > 华为机试题
头像
牛客280424962号
编辑于 2020-08-23 00:45
+ 关注

华为机试题

题目 ;n*n 的格子上写着01 每隔一天 0 会像上下左右扩散 n天后全是0。 求n;  输入数字以逗号隔开,例如如0,1,0,1,1,1,0,1,0; 输出 2;
package com.example.testjava;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/*
* n*n 的格子上写着0或1 每隔一天 0 会像上下左右扩散 几天后全是0。这个网上搜不到
* */
public class TestJava3 {
    static int total;
    public  static  void main(String args[]){
        Scanner scanner=new Scanner(System.in);
        while (scanner.hasNext()) {
            String  str=scanner.next();
            String[] str1=str.split(",");
            int n= (int) Math.sqrt(str1.length);
            int [][] a=new int [n][n];
            List<Note> list=new ArrayList();

            for (int i=0;i<n;i++){
                for (int j=0;j<n;j++){
                    a[i][j]= Integer.parseInt(str1[i*n+j]);
                    Note note=new Note();
                    note.num= a[i][j];
                    if (a[i][j]==0){
                        note.flag=true;
                    }
                    if (i>0){
                        note.hasTop=true;
                    }
                    if (j>0){
                        note.hasLeft=true;
                    }
                    if (i+1<n){
                        note.hasBottom=true;
                    }
                    if (j+1<n){
                        note.hasRight=true;
                    }
                    list.add(note);
                }
            }
            for (int i=0;i<n;i++){
                for (int j=0;j<n;j++){
                    if (list.get(i*n+j).hasLeft){
                        list.get(i*n+j).noteLeft= list.get(i*n+j-1);
                    }

                    if (list.get(i*n+j).hasRight){
                        list.get(i*n+j).noteRight= list.get(i*n+j+1);
                    }
                    if (list.get(i*n+j).hasTop){
                        list.get(i*n+j).noteTop= list.get((i-1)*n+j);
                    }
                    if (list.get(i*n+j).hasBottom){
                        list.get(i*n+j).noteBottom= list.get((i+1)*n+j);
                    }
                }
            }
          System.out.print(getTotal(list));
        }


    }

    public  static int getTotal(List<Note> list){
         int sum=0;
        for (int i=0;i<list.size();i++){
            if (list.get(i).flag){
                if (list.get(i).noteBottom!=null)
                    list.get(i).noteBottom.num=0;
                if (list.get(i).noteTop!=null)
                    list.get(i).noteTop.num=0;
                if (list.get(i).noteRight!=null)
                    list.get(i).noteRight.num=0;
                if (list.get(i).noteLeft!=null)
                    list.get(i).noteLeft.num=0;
            }

        }
        for (int i=0;i<list.size();i++){
            if (list.get(i).num==0){
                if (list.get(i).noteBottom!=null)
                    list.get(i).noteBottom.flag=true;
                if (list.get(i).noteTop!=null)
                    list.get(i).noteTop.flag=true;
                if (list.get(i).noteRight!=null)
                    list.get(i).noteRight.flag=true;
                if (list.get(i).noteLeft!=null)
                    list.get(i).noteLeft.flag=true;
            }
            sum=sum+list.get(i).num;
        }
        total++;
        if (sum!=0){
            getTotal(list);
        }

        return total;
    }
    static class Note{
        Note noteTop;
        Note noteLeft;
        Note noteRight;
        Note noteBottom;
        int num;
        boolean hasLeft;
        boolean hasTop;
        boolean hasRight;
        boolean hasBottom;
        boolean flag;//具备感染能力
    }

}


全部评论

(2) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐