6

c ++で、与えられた15桁の数字の次の回文を見つけるための最速のロジックは何ですか? たとえば、134567329807541 の次の回文は何になりますか?

4

5 に答える 5

16
  • 数を3つの部分に分割しますhead、、、midtail

    1345673 2 9807541

  • 逆にして、 3765431headと比較しますtail

  • (それらが等しい場合reverse(head) <= tail、最初の入力は回文であり、次の入力が必要な場合)

    • の場合mid < 9、midをインクリメントします
    • それ以外の場合は、パーツをインクリメントheadして設定しますmid := 0
  • 結果:= head mid reverse(head)

    1345673 3リバース(1345673)=> 134567333765431

于 2009-10-04T10:11:18.637 に答える
3

こんな感じだと思います

  1. 番号を3つの部分に分割する134567329807541
  2. 最後のものを裏返します1457089
  3. 最初の部分よりも大きい場合(この場合)
    • firstpart ++
    • 中央部=0
  4. 最初の部分を裏返し、最後の部分を交換します。
于 2009-10-04T09:53:38.067 に答える
1

私は何も実装しようとはしていませんが、ロジックは次のようになると思います。

  1. 文字列の中央で数字を分割します。Xは左側の部分、Yは右側の部分です。
  2. reverse(X)<Yの場合、X'= {X+1とします。Xそれ以外の場合}
  3. 結果はconcat(X'、reverse(X'));です。

長さが不均一な場合は、中央の桁を個別に処理する必要があります。しかし、それは非常に些細なことです。

于 2009-10-04T09:54:03.527 に答える
0
Split the number into three parts head, mid and tail

if reverse(head)>tail 
result := head mid reverse(head)
else if reverse(head)= tail && mid<9 
    mid++
    result := head mid tail
else 
mid =0
head++
result := head mid reverse(head)
于 2014-02-01T06:58:39.353 に答える