一个面试题。。。
2013-09-12 21:27
274 查看
用1,2,2,3,4,5六个数字,组成一个6位数。
要求:
第三位数不能是2;
3和5不能相邻。
编写java程序显示所有的数字。
我自己的答案可能有点麻烦,但总归是搞出来了。。求简便的答案。。
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import org.junit.Test;
public class TT {
/**
* 1.用1,2,2,3,4,5六个数字,组成一个6位数。
* 要求: 第三位数不能是2; 3和5不能相邻。
* 编写java程序显示所有的数字。
* 123245
*/
@Test
public void test1() {
int[] a1 = { 1, 2, 2, 3, 4, 5 };
int[] a2 = { 1, 2, 2, 3, 4, 5 };
int[] a3 = { 1, 2, 2, 3, 4, 5 };
int[] a4 = { 1, 2, 2, 3, 4, 5 };
int[] a5 = { 1, 2, 2, 3, 4, 5 };
int[] a6 = { 1, 2, 2, 3, 4, 5 };
Set<String> set = new HashSet<String>();
for (int r1 : a1) {
int j = 0;
String str = "";
str += r1;
for (int r2 : a2) {
if (str.length() >= 2) {
str = str.substring(0, 1);
}
str += r2;
for (int r3 : a3) {
if (r3 == 2) {
continue;
}
if (str.length() >= 3) {
str = str.substring(0, 2);
}
str += r3;
for (int r4 : a4) {
if (str.length() >= 4) {
str = str.substring(0, 3);
}
str += r4;
for (int r5 : a5) {
if (str.length() >= 5) {
str = str.substring(0, 4);
}
str += r5;
for (int r6 : a6) {
if (str.length() >= 6) {
str = str.substring(0, 5);
}
str += r6;
// 判断 -- 3和5 相邻的
if ((!str.matches("[1-5]*[5|3][3|5][1-5]*"))
&& str.matches("[2-5]*[1][2-5]*")
&& str.matches("[1-5]*[2][1-5]*[2][1-5]*")
&& str.matches("[1-5]*[3][1-5]*")
&& str.matches("[1-5]*[4][1-5]*")
&& str.matches("[1-4]*[5][1-4]*")) {
set.add(str);
}
}
}
}
}
}
}
Iterator<String> it = set.iterator();
int i = 0;
while (it.hasNext()) {
if (i++ % 10 == 0) {
System.out.println();
System.out.print("第"+ (i/10+1) +"行:\t");
}
System.out.print(it.next() + "\t");
}
System.out.println();
System.out.println();
System.out.println("一共"+set.size());
}
}
要求:
第三位数不能是2;
3和5不能相邻。
编写java程序显示所有的数字。
我自己的答案可能有点麻烦,但总归是搞出来了。。求简便的答案。。
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import org.junit.Test;
public class TT {
/**
* 1.用1,2,2,3,4,5六个数字,组成一个6位数。
* 要求: 第三位数不能是2; 3和5不能相邻。
* 编写java程序显示所有的数字。
* 123245
*/
@Test
public void test1() {
int[] a1 = { 1, 2, 2, 3, 4, 5 };
int[] a2 = { 1, 2, 2, 3, 4, 5 };
int[] a3 = { 1, 2, 2, 3, 4, 5 };
int[] a4 = { 1, 2, 2, 3, 4, 5 };
int[] a5 = { 1, 2, 2, 3, 4, 5 };
int[] a6 = { 1, 2, 2, 3, 4, 5 };
Set<String> set = new HashSet<String>();
for (int r1 : a1) {
int j = 0;
String str = "";
str += r1;
for (int r2 : a2) {
if (str.length() >= 2) {
str = str.substring(0, 1);
}
str += r2;
for (int r3 : a3) {
if (r3 == 2) {
continue;
}
if (str.length() >= 3) {
str = str.substring(0, 2);
}
str += r3;
for (int r4 : a4) {
if (str.length() >= 4) {
str = str.substring(0, 3);
}
str += r4;
for (int r5 : a5) {
if (str.length() >= 5) {
str = str.substring(0, 4);
}
str += r5;
for (int r6 : a6) {
if (str.length() >= 6) {
str = str.substring(0, 5);
}
str += r6;
// 判断 -- 3和5 相邻的
if ((!str.matches("[1-5]*[5|3][3|5][1-5]*"))
&& str.matches("[2-5]*[1][2-5]*")
&& str.matches("[1-5]*[2][1-5]*[2][1-5]*")
&& str.matches("[1-5]*[3][1-5]*")
&& str.matches("[1-5]*[4][1-5]*")
&& str.matches("[1-4]*[5][1-4]*")) {
set.add(str);
}
}
}
}
}
}
}
Iterator<String> it = set.iterator();
int i = 0;
while (it.hasNext()) {
if (i++ % 10 == 0) {
System.out.println();
System.out.print("第"+ (i/10+1) +"行:\t");
}
System.out.print(it.next() + "\t");
}
System.out.println();
System.out.println();
System.out.println("一共"+set.size());
}
}
相关文章推荐
- 算法面试题——两个有序数组,将一个数组放入另一个空间很大的数组,要求合并之后依然有序,时间复杂度要求最小,不使用额外的数组。
- 【面试题】考察指针和内存布局的一个题目
- Hulu实习面试题--对一个数进行划分,求最大乘积
- 一个难倒众多人的面试题 !!!
- 一个fork的面试题
- 面试题-----两个栈实现一个队列
- 算法与数据结构面试题(21)-在一个字符串中找到第一个只出现一次的字符
- 面试题(两个栈实现一个队列和两个队列实现一个栈)
- 再来一个更复杂的测试面试题
- 一个关于fork的面试题
- 一个面试题
- 一个关于set的面试题
- github上比较有名的一个前端面试题,随便做做(5)
- 【算法面试题】从1-200中任意选出101个自然数,其中一个数必是另一个数的整数倍
- 这是某公司的一个面试题,关于求平均数的java程序,
- 腾讯面试题:海量数据中查找一个数
- 一道值得深思的面试题:写一个函数,返回一个数组中所有元素被第一个元素除的结果。
- 【一个经典的google面试题】在浏览器中输入Google.com并且按下回车之后发生了什么?
- 【面试题】有一个整数数组,求指定连续N个的和最大的子数组,PHP实现。
- 用PHP解决的一个栈的面试题