这个这个代码怎么写。(语言-c语言)

这个怎么写,十个数字的isbn码包含?处丢失的数字,求?处有无数字可以组成合法的isbn码,如果有输出1没有输出-1

img

isbn = "123456789?12" #这里你换成 input(),我在线测试写死的。
valid = False

# 枚举0-9的数字,替换?处并校验是否合法
for i in range(10):
    test_isbn = isbn.replace("?", str(i))
    s = 0
    for j in range(1, 13):
        # 根据规则计算ISBN码校验位
        s += (10 - j) * int(test_isbn[j-1])
    check_digit = (11 - s % 11) % 11
    if check_digit == int(test_isbn[-1]):
        valid = True
        break

# 输出结果
if valid:
    print("1")
else:
    print("-1")

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇博客: 牛客网C语言语法篇练习之习题集(2)中的 5.  [NOIP2008]ISBN号码(这个题我感觉特别好,因为第一遍我没做出来) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    链接      

    [NOIP2008]ISBN号码_牛客题霸_牛客网 (nowcoder.com)

     

     

    #include<stdio.h>
    
    int main()
    {
        char arr[13]={0};
        int i,j;
        scanf("%s",arr);
        int s=0;
        for(i=0,j=1;i<11;i++){
            if(arr[i]!='-'){
                s += (arr[i]-'0')*j;
                j++;
            }
        }
        int m=s%11;
        if(m == arr[12]-'0' || (m==10 && arr[12]=='X')){
            printf("Right\n");
        }else{
            if(m==10){
                for(i=0;i<12;i++){
                    printf("%c",arr[i]);
                }
                printf("X"); 
            }else{
                for(i=0;i<12;i++){
                    printf("%c",arr[i]);
                }
                printf("%d",m);
            }
        } 
        return 0;
    }

     


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^