小米2018笔试题——食堂里的长桌

版权声明:本文为博主原创文章,如果需要,请注明出处转载。 https://blog.csdn.net/qq_28618765/article/details/78025802

食堂有一张靠墙的长桌(只有面向墙的一排座位),独自来吃饭的同学都喜欢坐在这里,这长桌有一个不成文的规定:来的人都喜欢独处,不喜欢挨着其他人吃饭;

现在长桌上有一些各自独处的同学,这时又来一群人过来用餐,不知道新来的同学能不能都遵循这条规定,找到左右无人的座位?


输入:

第一行:一个字符串table,表示长桌(由字符‘1’和‘0’组成,每个字符代表一个座位,‘1’表示座位有人,table长度<10000)

第二行:一个正整数n,表示新来就餐人数,0<n<10000


输出:

一个布尔值,如果能放下所有新来的同学,返回true,否则返回false


样例输入:

1001

1

10001

1

10001

2


样例输出:

false

true

false


思路:

先处理第一个1前面所有的0,再处理最后一个1后面所有的0;接下来处理最前面的1和最后面的1之间的所有数:取“10”,再看看下一位是不是1,如果是1,则再取10,否则计算接下来为0的个数;执行相同的步骤,知道执行到最后一个1为止。



代码:

import java.util.Scanner;

public class Changz {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		String s = in.nextLine();
		int n = in.nextInt();
		
		int count=0;
		int i=0;
		int j=s.length();
		int c=0;
			
		//处理第一个1前面0的个数
		while(i<j && s.substring(i,i+1).equals("0"))
			i++;
		if(i%2 == 0 || (i%2!=0 && s.substring(i,i+1).equals("1")))
			count += i/2;
		else
			count += i/2+1;
		System.out.println(count);
		
		//处理最后一个1后面0的个数
		int jj=0;
		while(i<j && s.substring(j-1,j).equals("0")){
			j--;
			jj++;
		}
		count += jj/2;

		//处理除去前后所有的0之后们中间的字符串
		while(i<j && i+2<j && s.substring(i, i+2).equals("10")){
			int a=0;
			c=i+2;
			if(s.substring(c,c+2).equals("10")){
				i=c+2;
				continue;
			}
			while(c+1<j && s.substring(c,c+1).equals("0")){
				c++;
				a++;
			}
			i=c-1;
			count += a/2; 
		}	

		if(count>=n)
			System.out.println(true);
		else
			System.out.println(false);
	}
}




阅读更多
换一批

没有更多推荐了,返回首页