用Java写一个算法,把一串数字,所有可能的和按顺序排列,并计算每个和出现的次数

例子:12030405,可能的有1+2;1+0;1+3。。。12+0;12+3。。。12+30。。。1+(2+0);1+(2+3+0);1+(2+30+4)
最好是能加一个筛选和值大小范围的参数,比如和值选50-100以内,感谢

楼主你好

应你的要求 我只做了加一位的和加两位的
算法类代码如下:
public class CountSumClass {
private String number;
private String result = new String("");
public CountSumClass() {
number = new String();
}
public CountSumClass(String str) {
number = str;
}
public String getResult() {
return result;
}
public void addOne() {
int x,y;
for (int i = 0; i < number.length()-1; i++) {
x = (int)number.charAt(i) - 48;
for(int j = i+1; j<number.length(); j++) {
y = (int)number.charAt(j) - 48;
result += x+"+"+y+"="+(x+y)+"\n";
}
}
y=0;
for (int i = 0; i<number.length(); i++) {
x = (int)number.charAt(i) - 48;
y += x;
if(i == number.length()- 1) {
result += x+"="+y;
} else {
result += x+"+";
}
}
}
public void addTwo() {
int x,y,z;
result += "\n";
for (int i = 0; i<number.length()-1; i++) {
String substr = number.substring(i,i+2);
x = Integer.parseInt(substr);
z = (x%10) * 10 + (x/10);
for(int j=0; j<number.length(); j++) {
if(j!=i && j!=i+1) {
y = (int)number.charAt(j) - 48;
result += x+"+"+y+"="+(x+y)+"\n";
result += z+"+"+y+"="+(z+y)+"\n";
}
}
}
}
public String toString() {
return result;
}
}

希望能帮助你哈
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-23
就是穷举呗
先按一个切,切完了,猎取这个后面的所有的排列
再按两个切
直到这个数字的长度就OK了
组完的放到某个数组里面然后判断大小追问

求实现

相似回答