ID番号、注文番号、および日付コードプラスチェックサム成分によって有効領域17。次のようにチェックサム計算規則は次のとおりです。
まず、最初の17桁の加重合計は、重量分布がある:{} 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2。次いで、得られた値と計算モジュロ11
Z
;最終的に対応関係に従ってZ
値とチェックサムM
値:
Z:0 1 2 3 4 5 6 7 8 9 10
M:1 0 X 9 8 7 6 5 4 3 2
今、ID番号の一部を与えられ、妥当性チェックコードを確認してください、との質問に番号を出力します。
入力フォーマット:
最初の行の入力は正の整数で与えられるNを(入力されたID番号の数が≤)です。次いで、N行、各列18は、ID番号が付与されています。
出力フォーマット:
各出力ラインは、入力されたID番号の順に問題があります。ここだけの最後にすべての数字17とは、チェックサムが正確に計算されているかどうかをチェックする前に、17の前に合理的な検査かどうかではありません。すべての数値が正常であれば、出力
All passed
。サンプル入力1:
4 320124198808240056 12010X198901011234 110108196711301866 37070419881216001X
出力サンプル1:
12010X198901011234 110108196711301866 37070419881216001X
サンプル入力2:
2 320124198808240056 110108196711301862
出力サンプル2:
All passed
謝辞阜陽ノーマル・カレッジファンJianzhong教師補足データ
データを修正ストーンウォッシュ先生の浙江大学の謝辞川の学校
アイデア:
この質問のために、私は2つの点がより重要であるあると思います。
- ID番号の最初の17桁の加重合計は、それぞれ、重量配分の値の配列を格納し、各グループ識別動作のためのサイクル数を使用するために使用することができます。
- 出力形式:出力形式と類似している同様のトピックは、ほとんどのデータを入力することができ、それが決定された場合、同じ時間会うのデータのデータの各出力ピースの要件。(一部は、行ごとに各出力を要求されます)
する#include <stdio.hに> する#include < 文字列・H> int型のmain(){ int型N-; scanfの(" %のD "、およびN-); // ID番号入力たぶんXので、できる唯一のcharの配列と // [N-] [ここでは、そうでなければ\ N-最終を維持する場所がない、> 18でなければならない] チャー A [N-] [ 。19 ;] のための(INT I = 0、I <N - 、I ++ ){ scanf関数(" %のS " 、A [I]); } int型isPrimeと、 INT SUM; INT TMP = 1。; // 重量は重量に割り当てられている のint [重量。17 ] {= 7、9、10、5、8、4、2、1、6。 、3、7、9、10、5、8、4、2 }; // mは、対応するチェックサムである チャー M [ 11 ] = { ' 1 '、' 0 '、' X- '、' 9 '、' 8 '、' 7 '、' 6 '、' 5 '、' 4 '、' 3 '、' 2 ' }。 以下のために(INT iが= 0 ; I <N; I ++ ){ isPrime = 0 。 合計 = 0 ; 以下のための(int型 J = 0 ; jの< 17 ; J ++){ IF(A [I]、[J]> = ' 0 ' && A [I]、[J] <= ' 9 ' ){ // デジタル加重和 SUM + =(A [I]、[J] - ' 0 ')* 体重[J]; } // 長がXとして、無効な識別番号、isPrimeに1 =。 他{ isPrime = 1。; BREAK ; } } IF(isPrime == 0 ){ // 数値の次加重和11モジュロ SUM%= 11 。 // 最後のモジュロを比較した後 IF(M [SUM] ==(A [I] [ 17 )]){ isPrime = 0 ; } そうでなければ{ isPrime = 1 ; } } IF (isPrime){ のprintf(" %S \ N- " 、A [I]); TMP = 0 ; } } IF (TMP){ のprintf(" すべてが合格" ); } 戻り 0 ; }