69,336
社区成员
发帖
与我相关
我的任务
分享
int Digui(int a[],int n,int g)
{
static int sum1=0;
int i=n;
if(n > 0)
{
Digui(a,n-1,g-a[i]);
Digui(a,n-1,g+a[i]);
}else if(n == 0)
{
if(0 == g - a[n] || 0 == g +a[n])
sum1++;
}
return sum1;
} //sum1为总数,a[]为装了1~9的数字,n为当前循环的变量
package 实际问题;
public class Main {
public static void main(String[] args)
{
Main main = new Main();
main.doRecursion(1, 108);
System.out.println("总结果数为:"+main.count);
}
private int count = 0;
private int []sign = new int[9]; //存储8个符号
void doRecursion(int i, int N)
{
for(int j=0; j<3; j++)
{
sign[i] = j;
if(i==8) count = (getSum(N)) ? count+1 : count;
else doRecursion(i+1, N);
}
}
boolean getSum(int N) //获取当前的值是多少
{
int sum = 0;
StringBuffer sb = new StringBuffer("");
for(int i=1; i<=8; i++)
{
sb.append(i+"");
if(sign[i] !=0 ) sb.append((sign[i] ==1)?"+":"-");
}
sb.append("9");
String str = sb.toString();
int sign = 1;
for(int i=0,len=str.length(); i<len; i++)
{
int end = i+1;
while(end<len && str.charAt(end)>='0' && str.charAt(end)<='9') end++;
sum = sum + Integer.parseInt(str.substring(i, end))*sign;
sign = (end<len && str.charAt(end) == '+')?1:-1;
i = end;
}
if(sum == N) System.out.println(str);
return (sum == N);
}
}
import java.util.ArrayList;
import java.util.List;
public class Demo6 {
/**
* 用1 2 3 4 5 6 7 8 9来表示一个数据,中间可以用+、-符号或不加符号
* 1+23+4+56+7+8+9=108
* 123-45+6+7+8+9=108
* ……
*/
public static void fun(int num){
List<String> sbs= new ArrayList<String>();
//在1 2 3 4 5 6 7 8 后面分别加入+、-、或不加符号这三种情况,并把它们串联起来,共有3^8种
//如1+23+4+56+7+8+
for(int i = 1 ; i<=8 ; i++){
if(i == 1){
String sb1 = i + "+";
String sb2 = i + "-";
String sb3 = i + "";
sbs.add(sb1);
sbs.add(sb2);
sbs.add(sb3);
}else{
List<String> sbus = new ArrayList<String>();
for(String sb : sbs){
sbus.add(sb);
}
sbs.removeAll(sbus);
for (int j = 0; j < sbus.size(); j++) {
String sbu = sbus.get(j);
String sbu1 = sbu + i + "+";
String sbu2 = sbu + i + "-";
String sbu3 = sbu + i + "";
sbs.add(sbu1);
sbs.add(sbu2);
sbs.add(sbu3);
}
}
}
//对每一种情况进行分析
for (int i = 0; i < sbs.size(); i++) {
String sb = sbs.get(i);
sb += "9";
//取出数字,符号,数字,符号……这种格式
//如1+23+4+56+7+8+9,最后的结果为:1,+,23,+,4,+,56,+,7,+,8,+,9
List<String> strList = new ArrayList<String>();
//用于累计数字,如1+23+4+56+7+8+9中的'23'
String index = "";
for (int j = 0; j < sb.length(); j++) {
String each = sb.charAt(j) + "";
if(each.equals("+") || each.equals("-")){
strList.add(index);
strList.add(each);
index = "";
}else{
index += each;
if(j == sb.length() - 1){
strList.add(index);
}
}
}
/*************将表达式进行计算*************/
//第一个数
int sum = Integer.parseInt(strList.get(0));
//进行算法
for (int j = 1; j < strList.size(); j++) {
//12+3+45-6+7+8+9
if(strList.get(j).equals("+")){
sum = sum + Integer.parseInt(strList.get(j+1));
}else if(strList.get(j).equals("-")){
sum = sum - Integer.parseInt(strList.get(j+1));
}
}
if(sum == num){
System.out.println(sb + "=" + sum);
}
/*************end*************/
}
}
public static void main(String[] args) {
fun(108);
}
}