加法运算得到一个整型数字比如说是10
有如下几种情况:
1+9=10
2+8=10
1+2+7=10
1+2+3+4=10
1+1+1+1+1+5=10
。。
。。
很多种情况写一段程序把所有的情况都打印出来

解决方案 »

  1.   

    package com.xuz.csdn.june10;public class Calc { public static void main(String[] args) {
    calc(10);
    } private static void calc(int sum){
    for (int i = 1; i <= sum/2; i++) {
    System.out.println(i + "+" + (10-i) + "=" + sum);
    }
    }
    }
      

  2.   

    package com.xuz.csdn.june10;public class Calc {    public static void main(String[] args) {
            calc(10);
        }    private static void calc(int sum){
            for (int i = 1; i <= sum/2; i++) {
                System.out.println(i + "+" + (sum-i) + "=" + sum);
            }
        }
    }
    楼上有个地方错了。
      

  3.   

    最简单的【1-9】的整数数组循环10次相加 加到等10返回结果 > 10的break;这算法太笨拙了
      

  4.   

    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;
    }
    }
    不可以重复的。
      

  5.   

    回溯法,代码:/*
     * 加法运算得到一个整型数字比如说是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
      

  6.   

    PS:如果不想要10=10。
    加个限定条件!sb.toString.equals(""+num)就可以了
      

  7.   

    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();
    }
    }
    }
    }
    }
      

  8.   

    献丑了,上一个显然不行
    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");

    }
    }
    }
    }
    }