小米前端编程题:餐桌长度
发布于 2017-09-18 20:45 3345 次浏览 0 赞 来自 我要提问  

11 条回复


import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Main {


   /*请完成下面这个函数,实现题目要求的功能
   当然,你也可以不按照下面这个模板来作答,完全按照自己的想法来 ^-^
   ******************************开始写代码******************************/
   static boolean fun(String table, int n) {
       boolean result = false;
       char seats[] = table.toCharArray();
       for (int i = 0; i < seats.length; i++) {
           int current = seats[i];
           if (i == 0 ) {
               if (current == '0' && seats[i + 1] == '0'){
                   //第一个座位
                   seats[i] = '1';//已坐人,状态改变
                   n--;//可以坐一个人
                   i++;//下一个座位不做判定
               }
           } else if (i == seats.length - 1 ) {//最后一个座位可以坐人
           //最后一个座位
               if ( current == '0' && seats[i - 1] == '0'){
                   seats[i] = '1';//已坐人,状态改变
                   n--;//可以坐一个人
               }
           } else if (seats[i - 1] == '0' && current == '0' && seats[i + 1] == '0') {
               seats[i] = '1';//已坐人,状态改变
               n--;//可以坐一个人
               i++;//下一个座位不做判定
           }
           if (isEnd(n)) {
               result = true;//可以坐下新来的人
               break;
           }
       }
       return result;
   }
   static  boolean isEnd(int n){
       return n == 0;
   }
   /******************************结束写代码******************************/


   public static void main(String[] args){
       Scanner in = new Scanner(System.in);
       boolean res;

       String _table;
       try {
           _table = in.nextLine();
       } catch (Exception e) {
           _table = null;
       }

       int _n;
       _n = Integer.parseInt(in.nextLine().trim());

       res = fun(_table, _n);

//输出是复制来的,输出bool型调试不通过

       System.out.println(String.valueOf(res ? 1 : 0));
   }
}


2017-09-18 21:03
var str = read_line(),
	n = read_line() - 0
var startIndex = str.indexOf('1'),
	endIndex = str.lastIndexOf('1')

var startCount = ~~(startIndex / 2),
	endCount = ~~((str.length - 1 - endIndex) / 2)

var centerCount = 0,
	temp = 0
for (var i = startIndex + 1; i < endIndex; i++) {
	if (str[i] == 0) {
		temp++
	}
	if (temp % 2 == 1 && temp >= 3) {
		centerCount++
	}
	if (str[i] == 1) temp = 0
}
if (centerCount + startCount + endCount >= n) print('true')
else print('false')


2017-09-18 21:03
1

我感觉我做的对啊  但是A不出来   难道是输出1或0?


package work1;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
  Scanner in = new Scanner(System.in);
        boolean res;
            
        String _table;
        try {
            _table = in.nextLine();
        } catch (Exception e) {
            _table = null;
        }
        
        int _n;
        _n = Integer.parseInt(in.nextLine().trim());
  
        res = fun(_table, _n);
        System.out.println(res);  
}
private static Boolean fun (String a,int b) {
Boolean flag=false;
int count=0;
if(a.length()<3)
return flag;
for(int i=0;i<a.length()-2;i++) {
int temp=0;
if(a.substring(i, i+1).equals("1")) {
continue;
}
while(a.substring(i, i+1).equals("0")) {
i++;
temp++;
}
if(temp>=3) {
if(temp%2==0) {
count+=temp/2-1;
}
else 
count+=temp/2;
}
}
return (count>=b);
}
}


2017-09-18 21:04

除了第二题ac了之外,其他两题都是第一遍63%,改了之后75%,我也不懂错在哪里,因为不知道能不能用本地编译器,代码直接在上面打得,也没存下来。

这道我用了个很笨很笨的方法,就是从第一个字符开始,算连续的0的最大长度,如果0是在两边的话,能容纳的人+=长度/2,如果0不是在两边的话,能容纳的人+=(长度-1)/2。然后把能容纳的人数和n比较。复杂度应该是o(n)吧。捂脸,感觉自己想法好奇葩。。。。。至于为什么是75%,还没想通。。。。


2017-09-18 21:07
var readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
var inputArr = [];
rl.on('line', function(line){
    inputArr.push(line);
    if (inputArr.length === 2){
        var table = inputArr[0],
            n = inputArr[1];
        var result = fun(table,n);
        if(result){console.log(1);}
        else {console.log(0);}
        inputArr = [];
    }
});
function fun(table,n) {
    var pattern  = /(000)|(^00)|(00$)/g;

    var count = 0;
    if(table === 0 && n ===1){return true;}
    if(/1000001/g.exec(table)!=null)count+=1;
    pattern.lastIndex = 0;
    while(pattern.exec(table) != null){
        count++;
        if(count >= n){return true;}
    }
    return false;
}
用的正则表达式,不知道什么情况没匹配到,测试通过率88%


2017-09-18 21:08
1
function fun(table, n) {
    let sum = 0;
    let i = 0;
    if(table.substr(i, 2) === '00') {
        sum++;
        i += 1;
  }
  for(; i < table.length-2; ) {
      if(table.substr(i, 3) === '000') {
        table[i+1] = 1;
        i += 2;
        sum++;
  } else {
        i += 1;
  }
      if(sum >= n) return true;
  }
    if(table.substr(i, 2) === '00') sum++;
    if(sum>=n) return true;
    return false;
}

我觉得我做的挺简单的,就三种情况能插人,00 开头或00 结尾,中间就是 000

2017-09-18 21:09
function fun(table, n) {
    let arr = table.split("");

    for(let i = 0; i < arr.length; i++) {
        if(arr[i] == "1") {
            // 该座位有人,隔壁不能坐人
            i++;
        } else if(i + 1 < arr.length && arr[i + 1] == "0") {
            // 下一个座位也没人,入座
            // arr[i] = "1";
            n--;
            i++;
        }
    }

    return n == 0;
}

var res;
var _table = read_line();
var _n = parseInt(read_line());
res = fun(_table, _n);
res = res ? 1 : 0;
print(res);


2017-09-18 21:17
一只菜鸡 回复 coder_VHHJHVNJ

我把边上给漏掉了 直接0 悲剧

2017-09-18 21:29
一只菜鸡 回复 一只菜鸡

我把边上给漏掉了 加上这个应该就AC了 悲剧

2017-09-18 21:32
一只菜鸡 回复 背包出发

正则表达式是很好的 遇到连续3个以上的0 你怎么处理的

2017-09-18 21:35

int fun(string str,int n)

{

int sum = 0;

str += "0";

int flag = 0;


for(int i = 0; i <str.length(); i++)

{

if(str[i] == '0')

{

flag++;

if(flag == 3 )

{

sum++;

flag = 1;

}

}

else 

flag = 0;

}



return sum;

}

001这种情况没有考虑,结果也是通过了

2017-09-18 22:57
添加回复
回到顶部