首页 > 试题广场 >

[NOIP2008]ISBN号码

[编程题][NOIP2008]ISBN号码
  • 热度指数:24618 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 50M,其他语言100M
  • 算法知识视频讲解
每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔之后的五位数字代表该书在出版社的编号;最后一位为识别码。
识别码的计算方法如下:
首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2,…,9,再求和,即0×1+6×2+……+2×9=158,然后取158 mod 11的结果4作为识别码。
你的任务是编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出你认为是正确的ISBN号码。


输入描述:
只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN号码的格式要求)。


输出描述:
共一行,假如输入的ISBN号码的识别码正确,那么输出“Right”,否则,按照规定的格式,输出正确的ISBN号码(包括分隔符“-”)。
示例1

输入

0-670-82162-4

输出

Right
示例2

输入

0-670-82162-0

输出

0-670-82162-4
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) { // 注意 while 处理多个 case
            String[] a = in.next().split("-");
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < 3; i++) {
                sb.append(a[i]);
            }
            // 前三个数据
            String num = sb.toString();
            // 识别码
            int total = 0;
            for (int i = 0; i <= num.length() - 1; i++) {
                total += (i + 1) * Integer.parseInt(String.valueOf(num.charAt(i)));
            }
            // 计算所得识别码
            String code = String.valueOf(total % 11);
            if ("10".equals(code)) code = "X";
            if (!a[3].equals(code)) {
                a[3] = code;
                for (int i = 0; i < 4; i++) {
                    if ( i != 3) {
                        System.out.print(a[i] + "-");
                    } else {
                        System.out.print(a[i]);
                    }
                }
            } else {
                System.out.println("Right");
            }

        }
    }
}

发表于 2024-02-29 21:13:39 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String s=in.nextLine();
        String[] sList=s.split("-");
        String s1=sList[0]+sList[1]+sList[2];
        int a=0;
        if(sList[3].equals("X")){
            a=10;
        }else{
            a=Integer.valueOf(sList[3]);
        }
               
        int b=0;
        for(int i=0;i<9;i++){
            b=b+Integer.valueOf(s1.charAt(i)-'0')*(i+1);
        }
        int c=Math.floorMod(b,11);
        if(c==a){
            System.out.println("Right");
        }else{
            if(c==10){
                System.out.println(sList[0]+"-"+sList[1]+"-"+sList[2]+"-"+"X");
            }else{
                System.out.println(sList[0]+"-"+sList[1]+"-"+sList[2]+"-"+c);
            }
        }
    }
}

发表于 2022-10-28 22:27:06 回复(0)
import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        String str=sc.next();
        int count=0,idx=1;
        for(int i=0;i<str.length()-2;i++){
            String s=str.substring(i,i+1);
            if(!s.equals("-")){
                int x=Integer.parseInt(s);
                count+=x*idx;
                idx++;
            }
        }
        int mod=count%11;
        String modStr="";
        if(mod==10) modStr="X";
        else modStr=String.valueOf(mod);
        String strCode=str.substring(str.length()-1);
//         System.out.println(strCode);
        
        if(strCode.equals("X")){
            if(mod==10){
                System.out.println("Right");
            }else{
                System.out.println(str.substring(0,str.length()-1)+modStr);                                                                    
            }
        }else{
            if(modStr.equals(strCode)){
                System.out.println("Right");
            }else{
                System.out.println(str.substring(0,str.length()-1)+modStr);
            }
        }
    }
}

发表于 2022-08-14 16:00:45 回复(0)
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String[] str = sc.nextLine().split("");
        //提取所有数字
        int a = Integer.parseInt(str[0]);
        int a1 = Integer.parseInt(str[2]);
        int a2 = Integer.parseInt(str[3]);
        int a3 = Integer.parseInt(str[4]);
        int a4 = Integer.parseInt(str[6]);
        int a5 = Integer.parseInt(str[7]);
        int a6 = Integer.parseInt(str[8]);
        int a7 = Integer.parseInt(str[9]);
        int a8 = Integer.parseInt(str[10]);
        String a9 = str[12];
        
        int a10 = a*1 + a1*2 + a2*3  + a3*4 + a4*5 + a5*6  + a6*7 + a7*8 + a8*9;
        int a11 = a10%11;
        if(a11==10){
            String a12 = Integer.toString(a11);
            a12="X";
            if(a9.equals(a12)){
                System.out.println("Right");
            }
            else{
                //拼接结果
                for(int i=0;i<str.length-1;i++){
                    System.out.print(str[i]);
                }
                System.out.print(a12);
            }
        }
        else if(!a9.equals("X")){
            if(Integer.parseInt(a9)==a11){
            System.out.println("Right");
            }
            else{
                //拼接结果
                for(int i=0;i<str.length-1;i++){
                    System.out.print(str[i]);
                }
                System.out.print(a11);
        }
        }
        else{
            //拼接结果
            for(int i=0;i<str.length-1;i++){
                    System.out.print(str[i]);
                }
                System.out.print(a11);
        }
        
    }
}
发表于 2022-08-08 21:10:32 回复(0)
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        //while(scanner.hasNext()){
            String str = scanner.nextLine();
            StringBuffer strBuffer = new StringBuffer(str);
            String[] toArr = str.split("-");
            int isbnCode = 1 * Integer.valueOf(str.charAt(0) - '0') + 
                               2 * Integer.valueOf(str.charAt(2) - '0') + 
                               3 * Integer.valueOf(str.charAt(3) - '0') +
                               4 * Integer.valueOf(str.charAt(4) - '0') + 
                               5 * Integer.valueOf(str.charAt(6) - '0') + 
                               6 * Integer.valueOf(str.charAt(7) - '0') +
                               7 * Integer.valueOf(str.charAt(8) - '0') +
                               8 * Integer.valueOf(str.charAt(9) - '0') +
                               9 * Integer.valueOf(str.charAt(10) - '0');
            int identifyCode = isbnCode % 11;
            if(identifyCode == Integer.valueOf(strBuffer.charAt(12) - '0') || (strBuffer.charAt(12) == 'X' && identifyCode == 10)){
                System.out.println("Right");
            }else{
                strBuffer.delete(strBuffer.length() - 1,strBuffer.length());
                System.out.print(strBuffer);
                if(identifyCode != 10){
                    System.out.println(identifyCode);
                }else{
                    System.out.println("X");
                }
            }
      //}
    }
}

发表于 2022-06-27 16:51:54 回复(0)
import java.util.Scanner;
import java.util.regex.Pattern;
public class Main{
       public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String x=in.next();
        String str="\\d\\-\\d{3}\\-\\d{5}\\-\\w";
        String h = "";
        if( Pattern.matches(str,x))
        {
            String a="\\-";
           h+=x.replaceAll(a,"");
        }
        char []arr=h.toCharArray();
        int sum=0;
        for(int i=1;i<=arr.length-1;i++){
            sum+=(arr[i-1]-'0')*i;
        }
     
        //System.out.println(sum);
       // System.out.println((arr[0]-'0'));
      if((sum%11==(arr[arr.length-1]-'0'))||(sum%11==10)&&(arr[arr.length-1]=='X'))
      {  System.out.print("Right");
        }
        else{
            int temp=sum%11;
               String f=x.substring(0,x.length()-1);
            if(temp!=10)
                { f+=temp;}
            else{
                f+='X';
            }
            System.out.print(f);
        }
    }
}
发表于 2022-05-06 20:54:28 回复(0)
import java.util.*;
public class Main{
    public static void main(String args[]){
        Scanner input=new Scanner(System.in);
        String s=input.nextLine();
        int sum=0,flag=0;
        StringBuffer sb = new StringBuffer(s);
        sb.delete(1,2);
        sb.delete(4,5);
        sb.delete(9,10);
        String temp=sb.toString();   
        for(int i=0;i<sb.length()-1;i++){
            sum+=(temp.charAt(i)-'0')*(i+1);
        }
        flag=sum%11;

        if(flag==(temp.charAt(temp.length()-1))-'0'){
             System.out.print("Right");
        }
        else if(flag==10&&temp.charAt(temp.length()-1)=='X'){
            System.out.print("Right");
        }
        else{
           for(int j=0;j<temp.length();j++){
               if(j==1|j==4){
                   System.out.print("-");
               }
               else if(j==9){
                   if(flag==10){
                       System.out.print("-"+"X");
                   }
                   else
                    System.out.print("-"+flag);
                   break;
               }
               System.out.print(temp.charAt(j));
           }
        }
        
    }
}

发表于 2022-05-04 16:14:41 回复(0)
破题,纯纯的恶心人
import java.util.*;
public class Main{
    public static void main(String[] args)
    {

        Scanner in=new Scanner(System.in);
//         while(in.hasNextLine())
//         {
            String s=in.nextLine();
            StringBuffer sb=new StringBuffer(s);
            String[] ar=s.split("-");
            int a=1*Integer.valueOf(s.charAt(0)-'0')+
                  2*Integer.valueOf(s.charAt(2)-'0')+
                3*Integer.valueOf(s.charAt(3)-'0')+
                4*Integer.valueOf(s.charAt(4)-'0')+
                5*Integer.valueOf(s.charAt(6)-'0')+
                6*Integer.valueOf(s.charAt(7)-'0')+
                7*Integer.valueOf(s.charAt(8)-'0')+
                8*Integer.valueOf(s.charAt(9)-'0')+
                9*Integer.valueOf(s.charAt(10)-'0');
            int flag=a%11;
            //System.out.println(a);
            if(Integer.valueOf(sb.charAt(12)-'0')==(flag)||
               sb.charAt(12)=='X'&&flag==10)
                System.out.println("Right");
            else
            {
                sb.delete(sb.length()-1,sb.length());
                System.out.print(sb);
                if(flag!=10)
                    System.out.println(flag);
                else
                    System.out.println("X");
            }
       // }
    }
}

发表于 2022-05-03 14:37:06 回复(0)