确定给定整数是否与表达式5+4n
的结果匹配的有效方法是什么。说,我有一个数字54
,我想检查上面给出的表达式是否可以产生这个数字。我能想到的一种方法是评估5+4n
最多54
并检查结果是否与感兴趣的数量相匹配。但是当我不得不检查大数字时,这将是一种低效的方式。
答案 0 :(得分:1)
如果我们假设x总是大于或等于0,x=5+4n
可以重写为x=1+4(n+1)
。
这意味着当x除以4时,余数为1.所以你可以简单地执行以下操作:
private boolean doesMatch(x number) {
return x%4==1;
}
答案 1 :(得分:0)
如果要评估表达式A + Bn,A和B可配置,则应首先提取A和B:
Pattern p = Pattern.compile("(\\-?\\d+)\\s*\\+([\\-\\+]?\\d+)\\s*n");
Matcher m = p.matcher(expression);
if (m.matches()) {
int A = Integer.valueOf(m.group(1));
int B = Integer.valueOf(m.group(2));
// Evaluate expression
...
}
然后只需检查x
是否为解决方案:
// Evaluate expression
if ((x-A) % B == 0) {
// Number is a solution
} else {
// Number is not a solution for the expression
}