求个算法,我们用java, 麻烦能用java实现不?

荆棘谷-部落-我要么 发布于 2015/05/28 09:28
阅读 828
收藏 1

示例一:

输入: "1,2,3,4,56" 

输出:  "1,2,3,4,5", "1,2,3,4,6"


示例二:

输入: "12,3,5,6,7"

输出: "1,3,5,6,7", "2,3,5,6,7"

输入的格式限定是: "S1,S2,S3,S4,S5", 包括四个逗点,五个最大不超过10个的数字字符串.


要考试,求算法...

加载中
0
十月阳光
十月阳光

两个算法如果针对性地实现也不难,不过最后那个格式限定不太理解,既然是不超过10的数字字符串,那么56和12似乎不满足要求?

我马上去尝试写一下算法

0
荆棘谷-部落-我要么
荆棘谷-部落-我要么

不是不超过10,是长度不超过10,即,每一个 逗号节点之间,最长是 0123456789

即最大值:

"0123456789,0123456789,0123456789,0123456789,0123456789"


荆棘谷-部落-我要么
荆棘谷-部落-我要么
谢谢你啊,你是好人!
十月阳光
十月阳光
我觉得输入"0123456789,0123456789,0123456789,0123456789,0123456789"是不正确的,按照题目要求,数的是限定:"S1,S2,S3,S4,S5",第一位应该是1开头,第二位2开头...最后一位5开头,这种理解应该才是争取的?
十月阳光
十月阳光
额,这样的话,需求就比较明确了,我再考虑下,觉得挺有意思的
0
十月阳光
十月阳光
public static void main(String[] args) {
	System.out.println("请输入:");
	Scanner scanner = new Scanner(System.in);
	String data = scanner.next();
	String[] strs = data.split(",");
	List<String> strs1 = new ArrayList<String>();
	List<String> strs2 = new ArrayList<String>();
	for (String string : strs) {
	    if (string.length() > 1) {
		strs1.add(string.substring(0, 1));
		strs2.add(string.substring(1,2));
	    } else {
		strs1.add(string);
		strs2.add(string);
	    }
	}

	for (int i = 0; i < strs1.size(); i++) {
	    System.out.print(strs1.get(i));
	    if (i != strs1.size() -1) {
		System.out.print(",");
	    }
	}
	System.out.println();
	for (int i = 0; i < strs2.size(); i++) {
	    System.out.print(strs2.get(i));
	    if (i != strs2.size() -1) {
		System.out.print(",");
	    }
	}
    }


写得比较乱,也没扩展性,只是针对你的问题写的一套代码,如果需要有扩展的话,你再研究下,应该比较简单



荆棘谷-部落-我要么
荆棘谷-部落-我要么
回复 @终曲 : 你的理解是正确的,这个,是小是一种可能,最大是100000(10万)种可能.
十月阳光
十月阳光
回复 @终曲 : 我理解错了,我开始只是为了解决案例一和案例二做的针对性解决方案,无扩展性。
终曲
终曲
难道我理解错了?最多应该是10万种排列吧,你这个不管怎么输入只输出两条
0
wxt
wxt
 
String strs = "12,3,456,7,8";
String[] str = strs.split(",");
List<String> list = new ArrayList<String>();
for (int i = 0; i < str.length; i++) {
	List<String> list2 = new ArrayList<String>();
	for (int j = 0; j < str[i].length(); j++) {
		if (list.size() == 0) {
		    list2.add(str[i].substring(j, j + 1));
		} else {
		    for (int l = 0; l < list.size(); l++) {
			list2.add(list.get(l) + ","
			str[i].substring(j, j + 1));
		    }
		}
	}
	list = list2;
}
for (int l = 0; l < list.size(); l++) {
     System.out.println(list.get(l));
}



0
十月阳光
十月阳光
public static void main(String[] args) {
	System.out.println("请输入:");
	Scanner scanner = new Scanner(System.in);
	String data = scanner.next();
	String[] strs = data.split(",");
	StringBuffer stringBuffer = new StringBuffer();
	for (int j = 0; j < strs[0].length(); j++) {
	    stringBuffer.setLength(0);
	    stringBuffer.append(strs[0].charAt(j)).append(",");
	    for (int n = 0; n < strs[1].length(); n++) {
		stringBuffer.setLength(2);
		stringBuffer.append(strs[1].charAt(n)).append(",");
		for (int m = 0; m < strs[2].length(); m++) {
		    stringBuffer.setLength(4);
		    stringBuffer.append(strs[2].charAt(m)).append(",");
		    for (int b = 0; b < strs[3].length(); b++) {
			stringBuffer.setLength(6);
			stringBuffer.append(strs[3].charAt(b)).append(",");
			for (int k = 0; k < strs[4].length(); k++) {
			    stringBuffer.setLength(8);
			    stringBuffer.append(strs[4].charAt(k));
			    System.out.println(stringBuffer.toString());
			}
		    }
		}
	    }
	}
    }

这段代码可以执行效果:

请输入:
0123,45,67,8,9
0,4,6,8,9
0,4,7,8,9
0,5,6,8,9
0,5,7,8,9
1,4,6,8,9
1,4,7,8,9
1,5,6,8,9
1,5,7,8,9
2,4,6,8,9
2,4,7,8,9
2,5,6,8,9
2,5,7,8,9
3,4,6,8,9
3,4,7,8,9
3,5,6,8,9
3,5,7,8,9

但是有个问题,没有按照数据大小排列,我不知道是否有这种要求,比如不能出现:4,3,5,6,7这种情况,如果有的话,再加入判断就可以了。

不过我觉得这个算法应该可以写成递归,无奈自己才疏学浅啊



荆棘谷-部落-我要么
荆棘谷-部落-我要么
不用按大小排列的.谢谢你啊.
0
MZHS
MZHS
public static void main(String[] args) {
		String str1 = "1111111111,1111111111,1111111111,1111111111,1111111111";
		String[] split = str1.split(",");
		String s1 = split[0];
		String s2 = split[1];
		String s3 = split[2];
		String s4 = split[3];
		String s5 = split[4];
		int x = 0;
		for (int a = 0; a < s1.toCharArray().length; a++) {
			for (int b = 0; b < s2.toCharArray().length; b++) {
				for (int c = 0; c < s3.toCharArray().length; c++) {
					for (int d = 0; d < s4.toCharArray().length; d++) {
						for (int e = 0; e < s5.toCharArray().length; e++) {
							x++;
							System.err.println(s1.toCharArray()[a] + ""
									+ s2.toCharArray()[b] + ""
									+ s3.toCharArray()[c] + ""
									+ s4.toCharArray()[d] + ""
									+ s5.toCharArray()[e]);
						}
					}
				}
			}
		}
		System.err.println(x);
	}

不会算法,见谅,去除重复往map里扔



荆棘谷-部落-我要么
荆棘谷-部落-我要么
就是for了,谢谢你啊.
0
andyyuan5546
andyyuan5546
public class Combination {
	public static void combineOutput(String[] str,int index,StringBuffer res){
		if(index >= str.length){
			System.out.println(res);
			return;
		}
		
		for(int i = 0;i<str[index].length();i++){
			int curIndex = index;
			res.append(str[index].charAt(i));
			combineOutput(str, ++curIndex,res);
			res.deleteCharAt(res.length()-1);
		}
	}
	
	public static void main(String args[]){
		String s = "0123456789,0123456789,0123456789,0123456789,0123456789";
		String[] str=s.split(",");
		combineOutput(str, 0,new StringBuffer());
	}
}



荆棘谷-部落-我要么
荆棘谷-部落-我要么
谢谢啊,我研究一下.非常感谢.
0
loyal
loyal
哎...你们写的都好长啊~为什么没人用正则...然后replace掉.
0
大汉刺史
大汉刺史
//main方法
	String teststr="12,3,5,6,7";
		String[] strings=teststr.split(",");//切割
		
		char[][] strings2=new char[strings.length][];
		
		//下面把它变成字符的二维数组
		for(int i=0;i<strings.length;i++){
			char cs[]=strings[i].toCharArray();
			strings2[i]=new char[cs.length];
			for(int j=0;j<cs.length;j++){
				strings2[i][j]=cs[j];
			}
		}
		listAll(strings2);//调用函数得到所有的可能性

/**
	 * 一个二维数组串联能组成的所有可能性
	 * @param stringss
	 */
	public static void listAll(char[][] stringss){
		
		int cvalue=1;
		int i;
		for(i=0;i<stringss.length;i++)
			cvalue*=stringss[i].length;
		
		for(int j=0;j<cvalue;j++){
			int tmpvalue=1;
			char[] cs=new char[stringss.length];
			cs[i-1]=stringss[i-1][j%stringss[i-1].length];
			tmpvalue=stringss[i-1].length;
			for(int k=i-2;k>=0;k--){
				cs[k]=stringss[k][j/tmpvalue%stringss[k].length];
				tmpvalue*=stringss[k].length;
			}
			//输出这个数组
			for(int m=0;m<cs.length;m++){
				System.out.print(cs[m]+"\t");
			}
			System.out.println();
		}
	}



荆棘谷-部落-我要么
荆棘谷-部落-我要么
谢谢,你们都是好人.
0
public static void main(String[] args) {
// TODO Auto-generated method stub

Test1 t = new Test1();
StringBuffer[] s = t.test("1,2,3,4,56");
for(StringBuffer sf :s){
System.out.println(sf.toString().substring(0,sf.toString().lastIndexOf(",")));
}
}


public StringBuffer[] test(String str){
String[] strArray = str.split(",");
int len = 1;
List<char[]> list = new ArrayList<char[]>();
for(int j = 0; j<strArray.length; j++){
String s1 = strArray[j];
char[] chs = s1.toCharArray();
len = chs.length * len;
list.add(chs);
}

StringBuffer[] sbs = new StringBuffer[len];
for(int i=0; i<len; i++){
sbs[i] = new StringBuffer();
}
for(char[] cs : list){
int csLen = cs.length;
int t = len/csLen;
for(int n=0; n<t; n++){
for(int m=0; m<csLen; m++){
sbs[n*csLen+m].append(cs[m]+",");
}
}

}
// for(StringBuffer sf :sbs){
// System.out.println(sf.toString().substring(0,sf.toString().lastIndexOf(",")));
// }
return sbs;
}
荆棘谷-部落-我要么
荆棘谷-部落-我要么
谢谢谢谢...
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部