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);
}
}
}