30分求指点

P1055 [NOIP2008 普及组] ISBN 号码

AnionicCr @ 2024-11-04 22:13:32

我已经尽己所能将代码最简化了,但是4个TLE 3个WA,求大神指教

#include <stdio.h>
int main()
{
    char n[10]={0};
    int sum=0;
    for(int i=0;i<10;i++)
    {
        scanf("%c",&n[i]);
        if(n[i]>='0'&&n[i]<='9')
        {
            continue;
        }
        else
            i--;
    }

    for(int j=0;j<9;j++)
    {
        sum=sum+(n[j]-48)*(j+1);
    }

    if((sum%11)==n[9]-48)
    {
        printf("Right");
    }else
    {
            printf("%c-%c%c%c-%c%c%c%c%c-%d\n", n[0], n[1], n[2], n[3], n[4], n[5], n[6], n[7], n[8], sum%11);
    }

    return 0;
}

by tengyuxuan @ 2024-11-09 22:05:17

#include <bits/stdc++.h>
using namespace std;

int main(){
    char c;
    int sum=0,d=INT_MAX,x=1;
    string s;
    getline(cin,s);
    for(int i=1;i<=11;i++){
        if(s[i-1]!='-'){
            sum+=(s[i-1]-48)*x;
            x++;
        }
    }
    if(sum%11!=10){
        d=(int) s[12]-48;
    }
    if((sum%11!=10&&sum%11==d)||d==INT_MAX&&sum%11==10&&s[12]=='X'){
        cout<<"Right";
    }
    else if(sum%11==10&&d==INT_MAX){
        for(int i=0;i<=11;i++){
            cout<<s[i];
        }
        cout<<'X';
    }else{
        for(int i=0;i<=11;i++){
            cout<<s[i]; 
        }
        cout<<sum%11;
    }
    return 0;
}

|