有意思的一个算法。
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
编程找出输入某个整数 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
相关文章推荐
- 一个比较有意思的算法题,猴子选大王
- 一个经典算法的解法,觉得挺有意思
- 一个有意思的算法,Container With Most Water
- 一个有意思的算法
- 每天学习一算法系列(32)(求一个矩阵中最大的二维矩阵(元素和最大))
- Google算法更新!搜索结果中将出现一个域名的大量页面
- 一个抽奖算法
- 发一个自己的算法演示程序
- 这两天在想一个算法,想了不少时间
- 如何来求取一个算法的时间复杂度?
- 判断一个图是否为二分图且输出结点二分的两个部分(算法导论22.2-6)
- 设计一个算法,把一个真分数表示为埃及分数之和的形式。所谓埃及分数是指分子为1的分数。如7、8=1/2+1/3+1/24。
- 我最喜欢的一个变量交换算法
- 一个有趣的算法
- 一天一个算法: 前缀,中缀,后缀表达式的转换
- 一个有意思的自然常数e
- 看到一个有意思的java题,请大家来回答
- 原串翻转 请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量)。 给定一个string iniString,请返回一个string,为翻转后的字符串
- 游戏瞄准的一个AI算法