黑马程序员技术交流社区
标题:
十万火急求回复!!!!!!!!!!!
[打印本页]
作者:
a4903913
时间:
2015-9-12 12:34
标题:
十万火急求回复!!!!!!!!!!!
今天面试了,被这道题给坑了,大神给个代码和思路,加上注释!!1拜谢!!!!!
用1、2、3、4这四个数字,用java写一个main函数,打印出所有不同的排列,如:1234、1243等,要求:"4"不能在第一位,"1"与"3"不能相连。
作者:
zjingwen
时间:
2015-9-12 13:06
坐等搞手
作者:
a4903913
时间:
2015-9-12 13:07
楼主做出来了!!!!1哇哈哈
作者:
a4903913
时间:
2015-9-12 13:08
写条件的时候写错了一个细节。找了半天没找到。后来闪现了 终于找到了!!!!!!!!!!!
作者:
a4903913
时间:
2015-9-12 13:13
楼主可能会中安卓就业班78期,谁知道住宿是怎么弄的........
作者:
yz112069947
时间:
2015-9-12 13:23
观摩下···
作者:
alex322326
时间:
2015-9-12 13:25
楼主多少分啊
作者:
a4903913
时间:
2015-9-12 13:27
package heima;
import java.util.Set;
import java.util.TreeSet;
/***
* 2. 用1、2、3、4这四个数字,用java写一个main函数,打印出所有不同的排列,
* 如:1234、1243等,要求:"4"不能在第一位,"1"与"3"不能相连。
* @author Administrator
*
*/
public class Test2 {
public static void main(String[] args) {
Set<String> s = new TreeSet<String>();
StringBuilder sb = new StringBuilder();
int aa = 0;
//因为不知道有多少个 所以写了个200
while (aa < 200) {
for (int i = 0; i < 4; i++) {
sb.append((int)(Math.random() * 4 +1));
}
char[] cha = sb.toString().toCharArray();
//4的不要
if (cha[0] == '4') {
sb = sb.delete(0, 4);
continue;
}
for (int i = 0; i < cha.length; i++) {
if (i+1 == 4) {
continue;
}
//13相连的
if (cha[i] == '1' && cha[i+1] == '3') {
sb = sb.delete(0, 4);
continue;
}
//31相连的
if (cha[i] == '3' && cha[i+1] == '1') {
sb = sb.delete(0, 4);
continue;
}
}
s.add(sb.toString());
sb = sb.delete(0, 4);
aa++;
}
//有多少个
System.out.println(s.size());
for (String string : s) {
System.out.println(string);
}
}
}
作者:
ashun
时间:
2015-9-12 15:06
import java.util.ArrayList;
import java.util.List;
public class abc3 {
/*
* 输出"1234"的所有四位组合
*/
public static void main(String[] args) {
String str = "1234";
//调用组合函数
List<String> res = method(str, "");
for (String s : res) {
// 输出首位不等于"4" 并且不含"13" 和"31"的所有组合
if (s.charAt(0) != '4' && !s.contains("13") && !s.contains("31")) {
System.out.print(s + " ");
}
}
}
// 组合函数
private static List<String> method(String str, String buf) {
List<String> res = new ArrayList<String>();
// 当组合含有四个字符时 添加到res中
if (str.length() <= 0)
res.add(buf);
for (int i = 0; i < str.length(); i++) {
// 递归调用组合函数
List<String> temp = method(new StringBuilder(str).deleteCharAt(i).toString(), buf + str.charAt(i));
res.addAll(temp);
}
return res;
}
}
作者:
fmi110
时间:
2015-9-12 17:48
public class Test6 {
/**
* 用1、2、3、4这四个数字,用java写一个main函数,打印出所有不同的排列,如:1234、1243等,
* 要求:"4"不能在第一位,"1"与"3"不能相连。
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//正则表达式,代表不以4开头的字符串
String regex1 = "^[^4].*$";
//代表1和3相连的字符串
String regex2 = ".*[1][3].*$";
String regex3 = ".*[3][1].*$";
//建立存储组合的字符
StringBuilder sb = new StringBuilder("");
int count = 0;//统计个数
for(int i = 1;i < 5;i++){
for (int j = 1 ; j < 5; j++) {
for(int k = 1; k < 5 ; k++){
for(int h = 1 ; h < 5 ; h++){
sb.append(i).append(j).append(k).append(h);
String str = sb.toString();
if(str.matches(regex1))//不以4开头
{
if(!(str.matches(regex2)||str.matches(regex3))){//1和3不相连
count++;
System.out.println(str+"..."+count);
}
}
sb.delete(0,sb.length());
}
}
}
}
}
}
复制代码
作者:
ln0491
时间:
2015-9-12 19:25
好东东。。。。。。。。。。
作者:
小小成很拽
时间:
2015-9-13 23:41
看评论。。。
作者:
193936696
时间:
2015-9-14 00:04
收藏了 加油不气馁
作者:
大头爱傻瓜
时间:
2015-9-14 00:10
很有意思的代码
作者:
15738320440
时间:
2015-9-14 00:26
好,可以用正则表达式吧!
作者:
Anmyre
时间:
2015-9-14 09:23
学习了 加油啊
作者:
平凡的鱼
时间:
2015-9-14 16:43
好像还可以用数组实现把 可以吗?
作者:
foreverfun
时间:
2015-9-14 20:31
应该可以用正则表达式吧,希望有大神来做
作者:
kenfans
时间:
2015-9-14 20:39
全部排出来然后判断
作者:
chenyannna
时间:
2015-9-14 20:52
新手一看到题就迷茫了
作者:
TseW30
时间:
2015-9-14 21:25
坐等高高手~
作者:
往事如风555
时间:
2015-9-14 23:18
还没学到这呢
作者:
霹雳三口组
时间:
2015-9-14 23:32
本帖最后由 霹雳三口组 于 2015-9-14 23:37 编辑
只想到使用for循环和if语句实现,等看几天视频再看可不可以使用其他方法实现吧,楼上的几个代码使用了还没有学到的知识点。
package Test1;
/**
用1、2、3、4这四个数字,用java写一个main函数,打印出所有不同的排列,如:1234、1243等,要求:"4"不能在第一位,"1"与"3"不能相连
*/
public class Test2 {
public static void main(String args[]){
String str="";
for (int x=1;x<4;x++){
for (int y=1;y<5;y++){
for(int z=1;z<5;z++){
for(int k=1;k<5;k++){
//for循环语句得到所有不以4开头的包含1234的组合
if((x+y+z+k)==10){
if ((x!=y) & (y!=z) & (z!=k) & (x!=k) &(y!=k) & (x!=z)){
//两个if语句得到所有含有1234的组合
str=""+x+y+z+k;
if (!str.contains("13") & !str.contains("31")){ //排除包含的“13”或者“31”的组合
System.out.println(str);
}
}
}
}
}
}
}
}
}
复制代码
作者:
莫盛强
时间:
2015-9-15 10:19
感觉晕晕的
作者:
a4903913
时间:
2015-9-17 20:59
霹雳三口组 发表于 2015-9-14 23:32
只想到使用for循环和if语句实现,等看几天视频再看可不可以使用其他方法实现吧,楼上的几个代码使用了还没 ...
厉害,这思路!!!!!!!!!!!!
作者:
行而受之
时间:
2015-9-17 21:17
我得好好研究研究
作者:
zzq18217362451
时间:
2015-9-17 21:22
感觉好难啊
作者:
a4903913
时间:
2015-9-20 15:42
这是用正则写的,正则写会简单很多的
作者:
哈哈我赢了
时间:
2015-9-20 21:53
新手来看看。。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2