28日目433ISBN番号(アナログ)

433.ISBN番号

公式に発行されたすべての書籍には、それに対応するISBN番号があります。ISBNコードには、9桁、1つの識別コード、3つの区切り記号が含まれます。規定の形式は「x-xxx-xxxxx-x」です。記号「-」は区切り記号です(キーボードのマイナス記号)、最後の桁は識別コードです。たとえば、0-670-82162-4は標準のISBNコードです。

ISBNコードの最初の桁は、本の出版言語を示します。たとえば、0は英語を表し、最初の区切り文字「-」の後の3桁は出版社を表します。たとえば、670はVirgin Pressを表し、後の5桁は2番目の区切り記号出版社の書籍のシリアル番号を表します。最後の桁は識別コードです。

識別コードの計算方法は次のとおりです。

最初の桁に1を掛け、次の桁に2を掛けます...というように、結果mod 11を使用すると、余りは識別コードになり、余りが10の場合、識別コードは大文字のXになります。

たとえば、ISBN番号0-670-82162-4の識別コード4は、次のように取得されます。9つの番号067082162の場合、左から右に1、2、...、9を掛けてから、合計します。それらを上に、つまり、0×1 + 6×2 +…+ 2×9 = 158とし、158 mod11の結果4を識別コードとして取得します。

入力したISBN番号の識別コードが正しいかどうかを判断するプログラムを作成し、正しい場合は「正しい」のみを出力します。間違っている場合は、正しいと思われるISBN番号を出力します。

入力形式
入力ファイルは1行のみで、書籍のISBN番号を表す文字シーケンスです(入力がISBN番号の形式要件を満たしていることを確認してください)。

出力形式
出力ファイルは1行です。入力ISBN番号の識別コードが正しければ「右」を出力し、そうでない場合は所定の形式で正しいISBN番号(区切り文字「-」を含む)を出力します。

入力サンプル:

0-670-82162-4

サンプル出力:

正しい

入力サンプル:

0-670-82162-0

サンプル出力:

0-670-82162-4

アイデア:

私たちの筆記インタビュー、特に筆記試験では、アルゴリズムの質問の説明が非常に長く、それを見ると怖いことがあります。実際、多くの長い説明の質問は難しくなく、単なるシミュレーションの質問です。 。たとえば、この質問は模擬質問です。

アルゴリズム
(文字列処理、シミュレーション) O(n)O(n)O n
質問で与えられた規則に従って、識別コードを計算し、それが与えられた識別コードと同じであるかどうかを判断します。

  • 同じ場合、出力“Right”;
  • 異なる場合は、正しい文字列を出力してください。

時間計算量
各文字は1回処理されるため、合計時間計算量はO(n)O(n)です。O n

Javaコード

import java.util.Scanner;

public class Main {
    
    
    public static void main(String[] args) {
    
    
        Scanner scanner = new Scanner(System.in);
        String str = scanner.next();
        int sum = 0;
        char ch ;
        //计算sum,注意最后一个字符不用计算
        for(int i = 0,j = 1;i < str.length() - 1;i++){
    
    
            if(str.charAt(i) != '-'){
    
    
               sum += (str.charAt(i) - '0') * j;
                j++;
            }
        }
        if(sum % 11 == 10){
    
    
            ch = 'X';
        }else{
    
    //int型与char型运算后结果是int型,故这里需要强转会char型
            ch = (char)(sum % 11 +'0');
        }
        if(ch == str.charAt(str.length() -1)){
    
    
            System.out.println("Right");
        }else{
    
    
            System.out.println(str.substring(0,str.length() - 1) + ch);
        }
    }
}

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/YouMing_Li/article/details/113942737