在 线 求 助

P1055 [NOIP2008 普及组] ISBN 号码

lanchenhao2010 @ 2022-08-08 09:04:33

崩溃了……

代码改了几十次都没过,IDE又卡爆了,无法测试。

有大佬能高抬贵手雪中送炭帮帮我吗【跪】?

附代码。

#include <iostream> //P1055 ISBN号码
#include <cstdio>
#include <cmath>
using namespace std;
int main(){
    int a[9];
    char p,m[15]="0123456789X";
    scanf("%d-%d%d%d-%d%d%d%d%d-%c",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6],&a[7],&a[8],&p);
    int rp = 0;
    for(int i = 1;i <= 9;i++){
        rp += i * a[i - 1];
    }
    rp %= 11;
    if (p == m[rp]) printf("Right");
    else printf("%d-%d%d%d-%d%d%d%d%d-%c",a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],m[rp]);

    return 0;
}

by YDMaYi @ 2022-08-08 09:11:07

虽然我没看懂宁的代码,但是我可以给宁看看我的代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    char isbn[100];
    cin>>isbn;
    int num[10],result=0;
    num[0]=isbn[0]-'0';
    num[1]=isbn[2]-'0';
    num[2]=isbn[3]-'0';
    num[3]=isbn[4]-'0';
    num[4]=isbn[6]-'0';
    num[5]=isbn[7]-'0';
    num[6]=isbn[8]-'0'; 
    num[7]=isbn[9]-'0';
    num[8]=isbn[10]-'0';
    num[9]=isbn[12]-'0';
    for(int i=0;i<9;i++)
    {
        result+=num[i]*(i+1);

    }
    result=result%11;

    if(result<=9) {
        if(result==num[9]) cout<<"Right";
        else 
        {
            isbn[12]=result+'0';
            cout<<isbn;
        }
    }
    else 
    {    
        if(isbn[12]=='X') cout<<"Right";
        else 
        {
            isbn[12]='X';
            cout<<isbn;
        }
    }
    return 0;
}

by shoot_down @ 2022-08-08 09:11:39

IDE又卡爆了有可能是RE


by shoot_down @ 2022-08-08 09:13:28

@lanchenhao2010 好像是scanf的问题,你换一下cin


by lanchenhao2010 @ 2022-08-08 09:18:11

感谢各位大佬,IDE正常了。 测试了一下,终于发现了问题。

附修改后的AC代码。```cpp

include <iostream>

include <cstdio>

include <cmath>

using namespace std; int main(){ int a[9]; char p,m[15]="0123456789X"; scanf("%1d-%1d%1d%1d-%1d%1d%1d%1d%1d-%c",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6],&a[7],&a[8],&p); //scanf格式符应用%1d。 int rp = 0; for(int i = 1;i <= 9;i++){ rp += i * a[i - 1]; } // cout << rp << endl; rp %= 11; // cout << rp << endl; if (p == m[rp]) printf("Right"); else printf("%d-%d%d%d-%d%d%d%d%d-%c",a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],m[rp]);

return 0;

}


by lanchenhao2010 @ 2022-08-08 09:21:11

代码糊在一块了,再发一遍。

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main(){
    int a[9];
    char p,m[15]="0123456789X";
    scanf("%1d-%1d%1d%1d-%1d%1d%1d%1d%1d-%c",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6],&a[7],&a[8],&p);
    int rp = 0;
    for(int i = 1;i <= 9;i++){
        rp += i * a[i - 1];
    }
    // cout << rp << endl;
    rp %= 11;
    // cout << rp << endl;
    if (p == m[rp]) printf("Right");
    else printf("%d-%d%d%d-%d%d%d%d%d-%c",a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],m[rp]); // scanf格式符得用%1d。

    return 0;
}

|