package com.xuz.csdn.june10;public class Test { static int KK = 10; static int[] number = new int[KK + 1]; public static void main(String[] args) { number[0] = 0; long count = fun(KK, KK); System.out.println("Count:" + count); } private static long fun(int sum, int K) { if (sum == 0) { System.out.printf("%d=", KK); for (int i = 1; i <= number[0]; ++i) { System.out.printf("%d", number[i]); if (i >= number[0]) break; System.out.printf("+"); } System.out.printf("\n"); return 1; } int count = 0; for (int i = K - 1; i > 0; --i) { number[number[0] + 1] = i; if (sum - i >= 0) { number[0]++; count += fun(sum - i, i); number[0]--; } } return count; } } 不可以重复的。
public class test { public static int b[]; public static void main(String[] args) { for (int i = 2; i<11;i++){ int a[] = new int[i]; cal(a,0); } } public static void cal(int a[],int index){ if (index < a.length){ for (int k = 1;k < 10;k++){ a[index] = k; cal(a,index+1); } } else{ int sum = 0;
for (int i = 0; i < a.length;i++){ sum += a[i]; } if (10 == sum){ Arrays.sort(a);
if (!Arrays.equals(a, b)){
for (int i = 0;i<a.length;i++){ System.out.print(a[i]); } System.out.print("\n"); b = a.clone(); } } } } }
献丑了,上一个显然不行 public class test { public static HashSet<Integer> hashset = new HashSet<Integer>(); public static void main(String[] args) { for (int i = 2; i<10;i++){ int a[] = new int[i]; cal(a,0); } } public static void cal(int a[],int index){ if (index < a.length){ for (int k = 1;k < 10;k++){ a[index] = k; cal(a,index+1); } } else{ int sum = 0;
for (int i = 0; i < a.length;i++){ sum += a[i]; } if (sum == 10){ int b[] = a.clone(); Arrays.sort(b);
if (!hashset.contains(Arrays.hashCode(b))){ //if (true){ hashset.add(Arrays.hashCode(b)); for (int i = 0;i<b.length;i++){ System.out.print(b[i]); } System.out.print("\n");
calc(10);
} private static void calc(int sum){
for (int i = 1; i <= sum/2; i++) {
System.out.println(i + "+" + (10-i) + "=" + sum);
}
}
}
calc(10);
} private static void calc(int sum){
for (int i = 1; i <= sum/2; i++) {
System.out.println(i + "+" + (sum-i) + "=" + sum);
}
}
}
楼上有个地方错了。
static int KK = 10;
static int[] number = new int[KK + 1]; public static void main(String[] args) {
number[0] = 0;
long count = fun(KK, KK);
System.out.println("Count:" + count);
} private static long fun(int sum, int K) {
if (sum == 0) {
System.out.printf("%d=", KK);
for (int i = 1; i <= number[0]; ++i) {
System.out.printf("%d", number[i]);
if (i >= number[0])
break;
System.out.printf("+");
}
System.out.printf("\n");
return 1;
}
int count = 0;
for (int i = K - 1; i > 0; --i) {
number[number[0] + 1] = i;
if (sum - i >= 0) {
number[0]++;
count += fun(sum - i, i);
number[0]--;
}
}
return count;
}
}
不可以重复的。
* 加法运算得到一个整型数字比如说是10
* 有如下几种情况:
* 1+9=10
* 2+8=10
* 1+2+7=10
* 1+2+3+4=10
* 1+1+1+1+1+5=10
* 。。
* 很多种情况
* 写一段程序把所有的情况都打印出来
*/
public class NumberSplit {
public static void main(String[] args) {
int num = 10;
int begin = 1;
int result = 0;
StringBuffer sbf = new StringBuffer();
split(num, result, begin, sbf);
} public static void split(int num, int result, int begin, StringBuffer sbf) {
if(result==num){
System.out.println(num+"="+sbf.toString());
return;
}
for(int i=begin;i<=num-result;i++){
String str="";
if(sbf.length()==0){
str=""+i;
}else{
str="+"+i;
}
sbf.append(str);
result+=i;
split(num,result,i,sbf);
result-=i;
sbf.delete(sbf.length()-str.length(), sbf.length());
}
}
}
输出结果:
10=1+1+1+1+1+1+1+1+1+1
10=1+1+1+1+1+1+1+1+2
10=1+1+1+1+1+1+1+3
10=1+1+1+1+1+1+2+2
10=1+1+1+1+1+1+4
10=1+1+1+1+1+2+3
10=1+1+1+1+1+5
10=1+1+1+1+2+2+2
10=1+1+1+1+2+4
10=1+1+1+1+3+3
10=1+1+1+1+6
10=1+1+1+2+2+3
10=1+1+1+2+5
10=1+1+1+3+4
10=1+1+1+7
10=1+1+2+2+2+2
10=1+1+2+2+4
10=1+1+2+3+3
10=1+1+2+6
10=1+1+3+5
10=1+1+4+4
10=1+1+8
10=1+2+2+2+3
10=1+2+2+5
10=1+2+3+4
10=1+2+7
10=1+3+3+3
10=1+3+6
10=1+4+5
10=1+9
10=2+2+2+2+2
10=2+2+2+4
10=2+2+3+3
10=2+2+6
10=2+3+5
10=2+4+4
10=2+8
10=3+3+4
10=3+7
10=4+6
10=5+5
10=10
加个限定条件!sb.toString.equals(""+num)就可以了
public static int b[];
public static void main(String[] args) {
for (int i = 2; i<11;i++){
int a[] = new int[i];
cal(a,0);
}
}
public static void cal(int a[],int index){
if (index < a.length){
for (int k = 1;k < 10;k++){
a[index] = k;
cal(a,index+1);
}
}
else{
int sum = 0;
for (int i = 0; i < a.length;i++){
sum += a[i];
}
if (10 == sum){
Arrays.sort(a);
if (!Arrays.equals(a, b)){
for (int i = 0;i<a.length;i++){
System.out.print(a[i]);
}
System.out.print("\n");
b = a.clone();
}
}
}
}
}
public class test {
public static HashSet<Integer> hashset = new HashSet<Integer>();
public static void main(String[] args) {
for (int i = 2; i<10;i++){
int a[] = new int[i];
cal(a,0);
}
}
public static void cal(int a[],int index){
if (index < a.length){
for (int k = 1;k < 10;k++){
a[index] = k;
cal(a,index+1);
}
}
else{
int sum = 0;
for (int i = 0; i < a.length;i++){
sum += a[i];
}
if (sum == 10){
int b[] = a.clone();
Arrays.sort(b);
if (!hashset.contains(Arrays.hashCode(b))){
//if (true){
hashset.add(Arrays.hashCode(b));
for (int i = 0;i<b.length;i++){
System.out.print(b[i]);
}
System.out.print("\n");
}
}
}
}
}