A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 开弓没有回头箭 中级黑马   /  2015-5-20 14:01  /  514 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

编写一个程序,在1,2,3,4,5,6,7,8,9(顺序不能变)数字之间插入“+”或“-”或什么都不插入,使得计算结果总和是100,输出所有可能性。例如1+2+34-5+67-8+9=100

7 个回复

倒序浏览
穷举所有可能,用if判断后打印。
回复 使用道具 举报
[0, 0, 1, 0, 2, 0, 1, 2]
[0, 0, 1, 2, 1, 0, 2, 0]
[0, 0, 2, 0, 2, 0, 1, 0]
[0, 0, 2, 2, 2, 2, 1, 2]
[0, 1, 1, 1, 2, 2, 1, 0]
[0, 1, 2, 1, 1, 0, 1, 1]
[0, 2, 2, 1, 2, 1, 1, 0]
[1, 0, 2, 1, 0, 1, 1, 1]
[1, 0, 2, 1, 1, 1, 0, 2]
[1, 1, 0, 2, 1, 0, 2, 1]
[1, 1, 2, 1, 1, 1, 0, 1]
0表示不插入,1表示插入+,2表示插入-
代码实在是太乱。。

import java.util.*;
class Test
{
        public static void main(String[] args){
                //0表示什么都不插入
                //1表示插入+
                //2表示插入-
                int[] arr = {0,0,0,0,0,0,0,0};
                int sum = sum(arr);
                System.out.println("sum="+sum);
                while (arr[0]!=3)
                {
                        if (sum(arr)==100){
                                System.out.println(Arrays.toString(arr));
                        }
                        //遍历所有可能
                        arr[7]++;
                        for (int x = 7;x>0 ;x-- )
                        {
                                if (arr[x]==3)
                                {
                                        arr[x]=0;
                                        arr[x-1]++;
                                }
                        }
                }

        }
//传入符号顺序,返回结果
        public static int sum(int[] arr){
                int[] a = {1,2,3,4,5,6,7,8,9};
                int sum = 0;
                int temp = 9;
                int num = 10;
                for(int x=arr.length-1;x>=0;x--){
                        if(arr[x]==0){
                                temp += a[x]*num;
                                num *= 10;
                        }
                        else if (arr[x]==1){
                                num = 10;
                                sum += temp;
                                temp = a[x];
                        }
                        else{
                                num = 10;
                                sum -= temp;
                                temp = a[x];
                        }
                }
                sum += temp;
                return sum;
        }
}
回复 使用道具 举报
import java.util.*;
class Test
{
        public static void main(String[] args){
                //0表示什么都不插入
                //1表示插入+
                //2表示插入-
                int[] arr = {0,0,0,0,0,0,0,0};
                int sum = sum(arr);
                while (arr[0]!=3)
                {
                        if (sum(arr)==100){
                                //System.out.println(Arrays.toString(arr));
                                for (int x =1;x<=8 ;x++ )
                                {
                                        if (arr[x-1]==0)
                                                System.out.print(x);
                                        else if (arr[x-1]==1)
                                                System.out.print(x+"+");
                                        else
                                                System.out.print(x+"-");
                                }
                                System.out.println(9);
                        }
                        //遍历所有可能
                        arr[7]++;
                        for (int x = 7;x>0 ;x-- )
                        {
                                if (arr[x]==3)
                                {
                                        arr[x]=0;
                                        arr[x-1]++;
                                }
                        }
                }

        }
//传入符号顺序,返回结果
        public static int sum(int[] arr){
                int[] a = {1,2,3,4,5,6,7,8,9};
                int sum = 0;
                int temp = 9;
                int num = 10;
                for(int x=arr.length-1;x>=0;x--){
                        if(arr[x]==0){
                                temp += a[x]*num;
                                num *= 10;
                        }
                        else if (arr[x]==1){
                                num = 10;
                                sum += temp;
                                temp = a[x];
                        }
                        else{
                                num = 10;
                                sum -= temp;
                                temp = a[x];
                        }
                }
                sum += temp;
                return sum;
        }
}

运行结果:
123+45-67+8-9
123+4-5+67-89
123-45-67+89
123-4-5-6-7+8-9
12+3+4+5-6-7+89
12+3-4+5+67+8+9
12-3-4+5-6+7+89
1+23-4+56+7+8+9
1+23-4+5+6+78-9
1+2+34-5+67-8+9
1+2+3-4+5+6+78+9
回复 使用道具 举报
谢晓明 发表于 2015-5-21 01:40
import java.util.*;
class Test
{

厉害。赞
回复 使用道具 举报
guoyangpeng 来自手机 中级黑马 2015-5-21 06:21:12
地板
厉害,学习了!
回复 使用道具 举报
牛。。。。。。。。。。
回复 使用道具 举报
真心学习了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马