帮帮忙写个算法 for (int i = 1024; i < 2048; i++) { String binStr = Integer.toBinaryString(i); System.out.println(binStr); }这样就可以了把 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 class Test { static char[] digits=new char[]{'X','D'}; public static void main(String[] args) { for (int i=0; i<1024; i++) { System.out.println(toUnsignedString(i)); } } private static String toUnsignedString(int i) { char[] buf=new char[10]; int charPos=10; for (int j=0; j<10; j++) { buf[--charPos]=digits[i&1]; i>>>=1; } return new String(buf); }} 从Integer类的toUnsignedString方法改的 这是个简单的组合,可以看成是10个格子,然后向这个10个格子里插5个D,剩下的格子不用管,肯定都是X,组合公式打不出来,简化后 10!/(5!*(10-5)!) 组合化简公式: n!/(r!*(n-r)!) 还有说明的就是 字符串 s="DXDXDXDXDX" 已经确定了组合出的字符串必须是包含了5个D和5个X,所以不会出现LZ说的 DDDDDDDDDD XXXXXXXXXX DDXXXXXXXX等等。 还有说明的就是 字符串 s="DXDXDXDXDX" 已经确定了组合出的字符串必须是包含了5个D和5个X,所以不会出现LZ说的 DDDDDDDDDD XXXXXXXXXX DDXXXXXXXX等等。事实上出现了这些情况二楼都说的很清楚了,我已经实现出来了 List<String>strList=new ArrayList<String>(); StringBuilder sb=new StringBuilder(); String str; char[]chs={'D','X'}; Random r=new Random(); while(true) { for(int j=0;j<10;j++) { sb.append(chs[r.nextInt(2)]); } str=sb.toString(); sb.delete(0, sb.length()); if(strList.contains(str)) continue; else strList.add(str); if(strList.size()==1024)//能计算出所有可能情况的个数 break; } for(int i=0;i<strList.size();i++) System.out.println(strList.get(i)); System.out.println("总共:"+strList.size());//新手,自己写了一个,能够按照要求输出显示所有可能组合,求点评!! 之前有写过全排列的算法加上了去重注意:根据我的理解,字符'D','X'每个只会出现5次,而不是10次。结果有A(10,5)=10!/5!=252种import java.util.Arrays;import java.util.Collection;import java.util.LinkedHashSet;import java.util.LinkedList;public class Test001 { public static void main(String[] args) { final String STR = "DXDXDXDXDX"; Collection<String> collection = getAllPermutation(STR, STR.length(), true); for (String string : collection) { System.out.println(string); } System.out.println("count:" + collection.size()); } /** * 返回该字符串字符的排列组合 * * @param source * 字符串 * @param count * 取出排列字符的个数 * @param isUnique * 是否需要去重,需要去重设置true * @return 该字符串所有字符的排列组合,无法获取返回null */ public static Collection<String> getAllPermutation(String source, int count, boolean isUnique) { if (source == null || source.equals("")) { return null; } Collection<String> collection = isUnique ? new LinkedHashSet<String>() : new LinkedList<String>(); getAllPermutation(source.toCharArray(), count, 0, collection); return collection; } /** * 返回字符数组的排列组合 */ static void getAllPermutation(char[] arr, int count, int index, Collection<String> collection) { if (index == count) { collection.add(String.valueOf(Arrays.copyOfRange(arr, index - count, index))); return; } for (int i = index; i < arr.length; i++) { swap(arr, i, index); getAllPermutation(arr, count, index + 1, collection); swap(arr, i, index); } } /** * 返回字符数组的组合 */ static void getCombination(char[] arr, int count, int begin, int index, char[] tempArr, Collection<String> collection) { if (index == count) { collection.add(String.valueOf(tempArr)); return; } for (int i = begin; i < arr.length; i++) { tempArr[index] = arr[i]; getCombination(arr, count, i + 1, index + 1, tempArr, collection); } } static void swap(char array[], int i, int j) { char tmp = array[i]; array[i] = array[j]; array[j] = tmp; }} 1024种的递归解法public class Test001 { static int _count = 0; public static void main(String[] args) { final char[] ARR = new char[] { 'D', 'X' }; output(ARR, 10, ""); System.out.println("count:" + _count); } static void output(char[] arr, int n, String str) { if (n == 0) { System.out.println(str); ++_count; return; } for (char c : arr) { output(arr, n - 1, str + c); } }} 再补充下:比如是1(二进制是0000000001假设把D看做1)那么String str="XXXXXXXXXD"//以此类推 是2(二进制0000000010)的情况String str ="XXXXXXXXDX"//推理完成代码如下String str=""; for (int i = 0; i < Integer.MAX_VALUE; i++) { str = Integer.valueOf(i).toBinaryString(i); if (str.length() != 10) { //这里用了一个apache的包commons-lang-2.5.jar 包含StringUtils str = StringUtils.leftPad(str, 10, "0"); } str = str.replaceAll("0", "X"); str = str.replaceAll("1", "D"); System.out.println(str); }同理 i小于改成1024就行写成MAXVALUE了 不好意思 还有说明的就是 字符串 s="DXDXDXDXDX" 已经确定了组合出的字符串必须是包含了5个D和5个X,所以不会出现LZ说的 DDDDDDDDDD XXXXXXXXXX DDXXXXXXXX等等。事实上出现了这些情况二楼都说的很清楚了,我已经实现出来了嗯 一共是252种 还有说明的就是 字符串 s="DXDXDXDXDX" 已经确定了组合出的字符串必须是包含了5个D和5个X,所以不会出现LZ说的 DDDDDDDDDD XXXXXXXXXX DDXXXXXXXX等等。事实上出现了这些情况二楼都说的很清楚了,我已经实现出来了嗯 一共是252种为什么不会出现0000000001这种情况? C(1, n) + ... + C(n, n);全组合啊 是我出的题有问题s 指定了一个值了其实是想就两个String 转成 10个字段长度的String的可能性。 还有说明的就是 字符串 s="DXDXDXDXDX" 已经确定了组合出的字符串必须是包含了5个D和5个X,所以不会出现LZ说的 DDDDDDDDDD XXXXXXXXXX DDXXXXXXXX等等。事实上出现了这些情况二楼都说的很清楚了,我已经实现出来了嗯 一共是252种为什么不会出现0000000001这种情况? 还有说明的就是 字符串 s="DXDXDXDXDX" 已经确定了组合出的字符串必须是包含了5个D和5个X,所以不会出现LZ说的 DDDDDDDDDD XXXXXXXXXX DDXXXXXXXX等等。事实上出现了这些情况二楼都说的很清楚了,我已经实现出来了嗯 一共是252种为什么不会出现0000000001这种情况? 不是你写的 字符串 String s="DXDXDXDXDX" 那不就是说这个字符串包含了5个D和5个X 怎么会出现 000000001这种情况 按题意 必然是5个0和5个1 创建窗口显示图片出错了 向各位请教一个笔试时遇到的数据库设计问题~ 请教大家一个关于线程的问题,内附代码 昨天考程序员,卖笔的拿错笔给我了,害我用的是HB填的答题卡。555555555555好难过啊。这样读卡机是不是读不出来了啊、 请问谁知道用Eclipse设计Swing时,serialVersionUID是什么东西啊 关于ObjectInputStream类的使用问题 List.removeall的效率问题? 新人跪求指点,关于多线程的。 在程序主体面板中如何设置多个工具栏? 这个错误怎么回事? 求助 有什么技术可以实现应答技术的回退 上传视频技术架构?
class Test {
static char[] digits=new char[]{'X','D'};
public static void main(String[] args) {
for (int i=0; i<1024; i++) {
System.out.println(toUnsignedString(i));
}
}
private static String toUnsignedString(int i) {
char[] buf=new char[10];
int charPos=10;
for (int j=0; j<10; j++) {
buf[--charPos]=digits[i&1];
i>>>=1;
}
return new String(buf);
}
}
还有说明的就是 字符串 s="DXDXDXDXDX" 已经确定了组合出的字符串必须是包含了5个D和5个X,所以不会出现LZ说的 DDDDDDDDDD XXXXXXXXXX DDXXXXXXXX等等。
还有说明的就是 字符串 s="DXDXDXDXDX" 已经确定了组合出的字符串必须是包含了5个D和5个X,所以不会出现LZ说的 DDDDDDDDDD XXXXXXXXXX DDXXXXXXXX等等。事实上出现了这些情况二楼都说的很清楚了,我已经实现出来了
StringBuilder sb=new StringBuilder();
String str;
char[]chs={'D','X'};
Random r=new Random();
while(true)
{
for(int j=0;j<10;j++)
{
sb.append(chs[r.nextInt(2)]);
}
str=sb.toString();
sb.delete(0, sb.length());
if(strList.contains(str))
continue;
else strList.add(str);
if(strList.size()==1024)//能计算出所有可能情况的个数
break;
}
for(int i=0;i<strList.size();i++)
System.out.println(strList.get(i));
System.out.println("总共:"+strList.size());
//新手,自己写了一个,能够按照要求输出显示所有可能组合,求点评!!
加上了去重注意:根据我的理解,字符'D','X'每个只会出现5次,而不是10次。结果有A(10,5)=10!/5!=252种
import java.util.Arrays;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.LinkedList;public class Test001 { public static void main(String[] args) {
final String STR = "DXDXDXDXDX";
Collection<String> collection = getAllPermutation(STR, STR.length(), true);
for (String string : collection) {
System.out.println(string);
}
System.out.println("count:" + collection.size());
}
/**
* 返回该字符串字符的排列组合
*
* @param source
* 字符串
* @param count
* 取出排列字符的个数
* @param isUnique
* 是否需要去重,需要去重设置true
* @return 该字符串所有字符的排列组合,无法获取返回null
*/
public static Collection<String> getAllPermutation(String source,
int count, boolean isUnique) {
if (source == null || source.equals("")) {
return null;
}
Collection<String> collection = isUnique ? new LinkedHashSet<String>()
: new LinkedList<String>();
getAllPermutation(source.toCharArray(), count, 0, collection);
return collection;
} /**
* 返回字符数组的排列组合
*/
static void getAllPermutation(char[] arr, int count, int index,
Collection<String> collection) {
if (index == count) {
collection.add(String.valueOf(Arrays.copyOfRange(arr,
index - count, index)));
return;
}
for (int i = index; i < arr.length; i++) {
swap(arr, i, index);
getAllPermutation(arr, count, index + 1, collection);
swap(arr, i, index);
}
} /**
* 返回字符数组的组合
*/
static void getCombination(char[] arr, int count, int begin, int index,
char[] tempArr, Collection<String> collection) {
if (index == count) {
collection.add(String.valueOf(tempArr));
return;
}
for (int i = begin; i < arr.length; i++) {
tempArr[index] = arr[i];
getCombination(arr, count, i + 1, index + 1, tempArr, collection);
}
} static void swap(char array[], int i, int j) {
char tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
}
public class Test001 { static int _count = 0;
public static void main(String[] args) {
final char[] ARR = new char[] { 'D', 'X' };
output(ARR, 10, "");
System.out.println("count:" + _count);
} static void output(char[] arr, int n, String str) {
if (n == 0) {
System.out.println(str);
++_count;
return;
}
for (char c : arr) {
output(arr, n - 1, str + c);
}
}
}
//以此类推 是2(二进制0000000010)的情况
String str ="XXXXXXXXDX"
//推理完成代码如下
String str="";
for (int i = 0; i < Integer.MAX_VALUE; i++) {
str = Integer.valueOf(i).toBinaryString(i);
if (str.length() != 10) {
//这里用了一个apache的包commons-lang-2.5.jar 包含StringUtils
str = StringUtils.leftPad(str, 10, "0");
}
str = str.replaceAll("0", "X");
str = str.replaceAll("1", "D");
System.out.println(str);
}
同理
还有说明的就是 字符串 s="DXDXDXDXDX" 已经确定了组合出的字符串必须是包含了5个D和5个X,所以不会出现LZ说的 DDDDDDDDDD XXXXXXXXXX DDXXXXXXXX等等。事实上出现了这些情况二楼都说的很清楚了,我已经实现出来了嗯 一共是252种
还有说明的就是 字符串 s="DXDXDXDXDX" 已经确定了组合出的字符串必须是包含了5个D和5个X,所以不会出现LZ说的 DDDDDDDDDD XXXXXXXXXX DDXXXXXXXX等等。事实上出现了这些情况二楼都说的很清楚了,我已经实现出来了嗯 一共是252种
为什么不会出现0000000001这种情况?
是我出的题有问题
s 指定了一个值了其实是想就两个String 转成 10个字段长度的String的可能性。
还有说明的就是 字符串 s="DXDXDXDXDX" 已经确定了组合出的字符串必须是包含了5个D和5个X,所以不会出现LZ说的 DDDDDDDDDD XXXXXXXXXX DDXXXXXXXX等等。事实上出现了这些情况二楼都说的很清楚了,我已经实现出来了嗯 一共是252种
为什么不会出现0000000001这种情况? 还有说明的就是 字符串 s="DXDXDXDXDX" 已经确定了组合出的字符串必须是包含了5个D和5个X,所以不会出现LZ说的 DDDDDDDDDD XXXXXXXXXX DDXXXXXXXX等等。事实上出现了这些情况二楼都说的很清楚了,我已经实现出来了嗯 一共是252种
为什么不会出现0000000001这种情况? 不是你写的 字符串 String s="DXDXDXDXDX" 那不就是说这个字符串包含了5个D和5个X
怎么会出现 000000001这种情况 按题意 必然是5个0和5个1