呜呜有大佬知道我这种暴力算法为什么不行吗o(╥﹏╥)o

P1055 [NOIP2008 普及组] ISBN 号码

Lindafish @ 2024-01-31 14:11:00

#include <stdio.h>

int main ( )
{
    int c1,c2,c3,c4,c5,c6,c7,c8,c9,c10;
    char z1,z2,z3;
    scanf("%d%c%d%d%d%c%d%d%d%d%d%c%d",&c1,&z1,&c2,&c3,&c4,&z2,&c5,&c6,&c7,&c8,&c9,&z3,&c10);
    int answer;
    answer=(c1*1+c2*2+c3*3+c4*4+c5*5+c6*6+c7*7+c8*8+c9*9)%11;
    if (answer==c10||(answer==10&&c10=='X')){
        printf("Right");
    }else {
        printf("%d%c%d%d%d%c%d%d%d%d%d%c%d",c1,z1,c2,c3,c4,z2,c5,c6,c7,c8,c9,z3,answer);
    }

    return 0;
}

虽然代码确实丑但是我感觉理论上行得通啊,还是说必须用数组吗?


by a1co0av5ce5az1cz0ap_ @ 2024-01-31 14:18:53

@Lindafish c10 是字符,ans 是数字,0 到 9 的时候不能直接判断,c10 要变为 c10-48


by luuia @ 2024-01-31 14:20:28

@ACaCaca_ c10就是数字吧


by a1co0av5ce5az1cz0ap_ @ 2024-01-31 14:22:45

@luuia 草我没看见,那这个时候是 X 不就没法输入了


by luuia @ 2024-01-31 15:01:39

X会读成88之后的判断也没问题吧。。


by wangderui111 @ 2024-02-04 14:08:59

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

用我这个,别告我


by wangderui111 @ 2024-02-04 14:10:11

还有,兄弟你没用 ``` using namespace std;


by Retana @ 2024-02-15 14:59:30

@wangderui111 不懂就问,这个减'0'是什么原理,单引号下面不是字符串吗


by mamutian2011 @ 2024-02-15 21:34:04

@Retana -‘0’表示-48,就减去0的ASCLL值,将字符数字转为int型数字


by Retana @ 2024-02-16 15:42:35

@mamutian2011 谢谢!


|