在过去的几个小时里,我一直试图解决这个问题,但我就是不明白。我知道必须有一种数学计算来计算它,但我不知道如何准确计算它。我知道这段代码没有意义,因为我完全迷路了,我将不胜感激任何提示或帮助,以帮助我更接近解决方案。
我问了我的教授,他告诉我一个提示,它类似于使用字母表的排列/组合,例如 26^3 用于 3 种不同的组合,但这对我没有多大帮助。
我知道的:
字符串中给出的输入有 796 个字符,我必须找到 796 个字符可以采用平衡括号形式的所有可能方式。
由于它必须以 '(' 开头并以 ')' 结尾,因此每种情况必须有 2 个括号。所以它可以是'()()(xc)(cvs)'。因此,这意味着数学计算必须涉及每个 char(s) 2*(something),因为它必须是平衡的。
我需要使用 rest(%) 运算符递归地查找每个案例,但是当我接受 a
char
in 而不是a 时,我该怎么做int
?
我不知道的是:
我将如何分析每个案例?如果没有简单的公式来计算输入,这不会花费很长时间或大量代码吗?
我需要很多 -
if
语句或递归吗?
问题:
令 Σ = {), (}。令 L ⊆ Σ* 是正确平衡括号的字符串集合。例如,(())() 在 L 中,而 (()))( 不在 L 中。形式上, L 递归定义如下。
ε ∈ L
串 x ≠ ε 在 L 当且仅当 x 的形式为 (y)z,其中 y 和 z 在 L 中。
n 是 0 到 999 之间的特定 3 位数字。
计算 f(n) mod 997
您可能会发现一些有用的事实:如果 n1,n2 是 N(自然数)的成员,那么,
(n1 x n2) mod 997 和 (n1 + n2) mod 997
n = 796(这对我来说是特定的,在这种情况下这将是给定的输入)
所以我必须“计算 f(796) mod 997 = ?” 使用程序。在这种情况下,我将简单地使用 java 来回答这个问题。
代码:
import java.util.*;
public class findBrackets
{
public static void main(String[] args)
{
String n;
int answer = 0;
Scanner input = new Scanner(System.in);
System.out.println("Input String");
n = input.nextLine();
// probably wrong because a string can start as x(d))c(()...
for(int i = 0; i < n; i++)
{
if(n[i] != '(' || n[i] != ')' || n[i] != null || n[i] != " ") {
answer = 2 * (Integer.parseInt(n[i]); // how can i calculate if its a char
// i have to use mod % operator somewhere but I don't know where?
}
}
System.out.println("f(796) mod 997 = " + answer);
}
}