您的位置:首页 > 其它

有意思的一个算法。

2005-11-07 23:20 246 查看
有一个未完成的等式1 2 3 4 5 6 7 8 9=N空格内(1前面没有空格)可以填入+,-,也可以不填。
编程找出输入某个整数 N 后使等式成立的所有方案的总数。
一共有8个空格每个有3种可能+ - 或什么都没有。。。
所以相当于一个3进制。
import java.io.*;
public class DS1103
{
public static void main(String args[])
{
try
{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String line="";
long number;
int count,loop;
while((line=reader.readLine())!="")
{
number = Long.parseLong(line);
for(loop=0,count=0;loop<6561;loop++)
{
if(calc(loop) == number)
{
count++;
}
}

System.out.println(count);

}
}
catch(Exception e)
{
System.out.println("");
}
}
public static long calc(int status)
{
long buffer=1,result=0;
int currentNum;
int op,elapsedop=0;
for(currentNum=2;currentNum<=9;currentNum++)
{
op = status%3;
status/=3;
if(op==0)
{
buffer = buffer*10 + currentNum;
}
else
{
if(elapsedop==2)
result-=buffer;
else
result+=buffer;

buffer=currentNum;
elapsedop=op;
}

}
if(elapsedop==2)
result-=buffer;
else
result+=buffer;
return result;
}
}
结果为:
21
16
543
1
2435
0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: