0

過去数時間、この質問を解こうとしましたが、理解できません。これを計算するには一種の数学的計算が必要であることは知っていますが、正確に計算する方法はわかりません。私は完全に迷っているので、このコードが意味をなさないことを知っています。解決策に近づくためのヒントや助けをいただければ幸いです。

教授に尋ねると、3 つの異なる組み合わせに対して 26^3 などのアルファベットを使用した順列/組み合わせに似ているというヒントを教えてくれましたが、これはあまり役に立ちませんでした。

私が知っていること:

  1. 文字列で指定された入力には 796 文字があり、796 文字がバランスの取れた括弧形式になる可能性のあるすべての方法を見つける必要があります。

  2. '(' で始まり ')' で終わる必要があるため、各ケースに 2 つの括弧が必要です。したがって、「()()(xc)(cvs)」となる可能性があります。したがって、バランスをとる必要があるため、数学的計算には 1 文字あたり 2*(何か) が含まれる必要があることを意味します。

  3. charすべてのケースを再帰的に見つけるには、remainder(%) 演算子を使用する必要がありますが、aではなく?を使用する場合はどうすればよいintですか?

私が知らないこと:

  1. 各ケースをどのように分析しますか? 入力を計算するための単純な式がなければ、長い時間や大量のコードが必要になることはありませんか?

  2. 多くのifステートメントまたは再帰が必要ですか?

質問:

Σ = {), (} とする. L ⊆ Σ* を適切にバランスの取れた括弧の文字列の集合とする. たとえば (())() は L にあり、(()))( は L にはない. L は次のように再帰的に定義されます。

ε ∈ L

文字列 x ≠ ε は、x が (y)z の形式である場合にのみ L に含まれます。ここで、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);

    }
 }
4

3 に答える 3

0

あなたが何を求めているのか正確にはまだよくわかりませんが、括弧が有効な配置であるかどうかを検証するには、次の方法を使用できます。私は同様のものを使用して、昔はすべての括弧が適切に閉じられていることを確認するために、100 ページの論文を調べました。

public static boolean isValid(String s) {
    int openParens = 0;
    for (int i = 0; i < s.length(); i++) {
        if (s.charAt(i) == '(') {
            // we found an open paren
            openParens++;
        } else if (s.charAt(i) == ')') {
            // we can close a paren
            openParens--;
        }
        if (openParens < 0) {
            // we closed a paren but there was nothing to close!
            return false;
        }
    }
    if (openParens > 0) {
        // we didn't close all parens!
        return false;
    }
    // we did!
    return true;
}
于 2014-09-17T19:25:46.750 に答える