一个关于字符串的笔试题,求大家帮忙解决

daijiguo 2015-05-14 08:31:21
3.现在有N个0和M个1,(0<=N<=10000,0<=M<=10000,N,M为正整数),
要求把它们排成一个长度为(N+M)的字符串,且同时满足:
(1)字符串中不能有连续2个0
(2)字符串中不能有连续3个1
请写一个程序随机输出一个符合要求的01字符串
举个栗子,当N=5, M=5时,一个合法的输出串为:1010101010;
而串0011001101和串0111010100不合法。


求大神帮解决,谢谢~
...全文
359 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lianjiao511214 2015-05-24
  • 打赏
  • 举报
回复
刚看到这个题,其实这个题很简单。其实就是找出 0 到 2(m+n)次方-1,满足你那两个条件的数字,做个for循环,里面写两个if判断就ok了,当然,这里有个特例,就是二进制数字可能小一点的不够长,就需要前面补0占位,特殊处理后,再进行if判断就完美了。这个题的难点在,理解循环的范围为什么是 0 到 2(m+n)次方-1
daijiguo 2015-05-16
  • 打赏
  • 举报
回复
谢谢楼上同学的解答,代码很简洁,稍微把for循环的判断语句改一下就行了,3Q
风吹过夏天 2015-05-14
  • 打赏
  • 举报
回复
感觉代码还是有点小问题把,假设有10个1,10个1都添加到字符串了,还有几个0没添加到字符串。这样的情况下还必须添加多一个0才是结果。而我的代码是1添加完后就结束了。添加一两个判断应该就可以搞定了。
风吹过夏天 2015-05-14
  • 打赏
  • 举报
回复
10000太大了,我模拟个100的你看看怎样,刚入坑代码可能写的烂。

package test;

public class MyTest {
	
	public static void main(String[] args) {
		int M = (int)(Math.random()*100);
		int N = (int)(Math.random()*100);
		System.out.println(M+" "+N);
		StringBuilder sb = new StringBuilder();
		for(int x=0,y=0; x<M && y<N; ){
			int k = ((int)(Math.random()*100))%2;
			switch(k){
				
				case 0:{
					if(!sb.toString().endsWith("0")){
						add0(sb);
						x++;
					}
					continue;
				}
				
				case 1:{
					if(!sb.toString().endsWith("11")){
						add1(sb);
						y++;
					}
					continue;
				}
			}
		}
		
		String str = new String(sb);
		System.out.println(str);
	}
	
	public static void add0(StringBuilder sb){
		sb.append("0");
	}
	
	public static void add1(StringBuilder sb){
		sb.append("1");
	}
}
风吹过夏天 2015-05-14
  • 打赏
  • 举报
回复
做是可以做,但是这题目出的不严谨,通常长度不可能为M+N。例如我100个0,300个1,长度为400的话肯定不符合要求。

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧