6 条题解

  • 3
    @ 2025-2-6 19:50:13

    ISBN号码

    题目大意:

    给你一个字符串,把除最后一位识别码的其他数字分别乘以1,2...9的和加起来对11取余,如果余数为10,那么识别码为X,如果等于最后一位,就输出Right, 如果不等于,就输出正确的字符串

    模拟即可(细节看代码注释)

    用枚举除了最后一位数字之外的数字和,然后模掉 11,最后特判一下最后一位是 10 的情况,就好了

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
    	int a,b,c,d,e,f,g,h,i,s1,s2;
    	char j;
        scanf("%1d-%1d%1d%1d-%1d%1d%1d%1d%1d-%c",&a,&b,&c,&d,&e,&f,&g,&h,&i,&j);
        s1=(a*1+b*2+c*3+d*4+e*5+f*6+g*7+h*8+i*9)%11;
        if(j=='X')
    		s2=10;
        else
    		s2=j-'0';
    		
        if(s1==s2)
        cout<<"Right";
        else if(s1==10)
        cout<<a<<"-"<<b<<c<<d<<"-"<<e<<f<<g<<h<<i<<"-X";
        else
        cout<<a<<"-"<<b<<c<<d<<"-"<<e<<f<<g<<h<<i<<"-"<<s1;
    	return 0;
    }
    

    最后求个赞qwq

    • 1
      @ 2025-9-20 16:54:58

      C语言解法 (新手求赞)

      #include <stdio.h>
      #include <string.h>
      int main()
      {
          char a[20];
          scanf("%s",a);
      
          int sum=0,count=0;
          for(int i=0;i<strlen(a)-1;i++){
              if(a[i]>='0'&&a[i]<='9'){
                  count++;
                  sum+=(a[i]-'0')*count;
              }
          }
      
          int b=sum%11;
          char c;
          if(b==10){
              c='X';
          }else{
              c=b+'0';
          }
      
          if(c==a[strlen(a)-1]){
              printf("Right");
          }else{
              a[strlen(a)-1]=c;
              printf("%s",a);
          }
      
      
          return 0;
      }
      
      • 0
        @ 2025-10-15 17:44:15
        #include<iostream>
        #include<string>
        using namespace std;
        int main()
        {
            char w[14];
            string p,y[14],check;
            int sum=0;
            for(int i=1;i<=13;i++)
            {
                cin>>w[i];
            }
            for(int i=1;i<=13;i++)
            {
                y[i]=w[i];
            }
            int t[14];
            for(int i=1;i<=12;i++)
            {
                try{t[i]=stoi(y[i]);}
                catch(const invalid_argument&e){t[i]=0;}
                if(i<=2)t[i]*=1;
                if(i<=6&&i>=3)t[i]*=i-1;
                if(i<=11&&i>=7)t[i]*=i-2;            
            }
            for(int i=1;i<=12;i++)
            {
                sum+=t[i];
            }
            check=to_string(sum%11);
            if(check=="10")
            {
                check='X';
            }
            string s13=string(1,w[13]);
            if(check==s13)cout<<"Right"<<endl;
            else 
            {
                for(int i=1;i<=12;i++)
                {p+=w[i];}
                p+=check;
                cout<<p<<endl;
            }
            return 0;   
        }
        
        • 0
          @ 2025-4-1 9:26:23

          import java.util.Scanner;

          public class Main2 {

          public static void main(String[] args) {
              Scanner sc = new Scanner(System.in);
          
              //用字符串来收纳输入的编号
              String str = sc.next();
          
              //将字符串转化为数组
              char[] charArr = str.toCharArray();
          
          
              //再创建一个int类型的数组,来存储转化后的数字,index表示intArr的索引
              int[] intArr = new int[10];
              int index = 0;
              //0-670-82162-4这是数组存储的内容,如果最后一位是'X',这里便不会存入
              for (int i = 0; i < charArr.length; i++) {
                  if (charArr[i] >= '0' && charArr[i] <= '9') {
                      intArr[index] = charArr[i] - '0';
                      index++;
                  }
              }
          
              //计算最后一个识别码数字是否正确,sum是前面数字题目要求的和
              int sum = 0;
              for (int i = 0; i < intArr.length - 1; i++) {
                  sum += intArr[i] * (1+i);
              }
          
              //算出最后一位数字是几
              int result = sum % 11;
          
          
              if (result == intArr[9]) {
                  System.out.println("Right\n");
              } else if(result == 10) {
                  //如果最后一位是'X',那就是正确的,直接输出Right
                  if (charArr[charArr.length - 1] == 'X') {
                      System.out.println("Right ");
                  } else {
                      //最后一位不是'X',要输出正确的内容
                      char temp = 'X';
                      charArr[charArr.length - 1] = temp;
                      for (int i = 0; i < charArr.length; i++) {
                          System.out.print(charArr[i]);
                      }
                  }
              } else {
                  //因为result是以int类型存储在电脑里的,若是直接(char)(result) 会打出乱码,因为可以显示的ASCII表中的东西一般是32到100,所以前面+ '0'
                  char temp = (char)('0' + result);
                  charArr[charArr.length - 1] = temp;
                  for (int i = 0; i < charArr.length; i++) {
                      System.out.print(charArr[i]);
                  }
              }
          }
          

          }

          • -3
            @ 2024-11-10 10:00:37

            AC+CE=

            #include<bits/stdc++.h>
            #define int unsigned long long
            #define INF 0x3f3f3f
            using namespace std;
            char c[11];
            int a[11];
            char c_;
            int ans;
            void print()
            {
            	cout<<a[1]<<"-";
            	for(int i=2;i<=4;i++)cout<<a[i];
            	cout<<"-";
            	for(int i=5;i<=9;i++)cout<<a[i];
            	cout<<"-";
            	if(ans!=10)cout<<ans;
            	else cout<<"X";
            }
            signed main()
            {
            	scanf("%c-%c%c%c-%c%c%c%c%c-%c",c+1,c+2,c+3,c+4,c+5,c+6,c+7,c+8,c+9,&c_);
            	for(int i=1;i<=9;i++)
            		a[i]=c[i]-48;
            	for(int i=1;i<=9;i++)
            		ans=(ans+a[i]*i)%11;
            	if(c_=='X'){
            		if(ans==10)cout<<"Right";
            		else print();
            	}
            	else{
            		if(ans==c_-'0')cout<<"Right";
            		else print();
            	}
                return 0;
            }
            
            • -4
              @ 2024-12-5 20:13:43

              #include<bits/stdc++.h> using namespace std; string a; int b[9]={0, 2, 3, 4, 6, 7, 8, 9, 10},s = 0; char x; int main(){ cin >> a; for(int i = 0;i < 9;i++) s += (a[b[i]] - '0') * (i + 1); s %= 11; if(s == 10) x='X'; else x = s+'0'; if(x == a[12]) cout << "Right"; else { for(int i = 0;i < 12;i++) cout << a[i]; cout << x; } return 0; }

              • 1

              信息

              ID
              5113
              时间
              1000ms
              内存
              128MiB
              难度
              3
              标签
              递交数
              721
              已通过
              233
              上传者