小白求助

P1055 [NOIP2008 普及组] ISBN 号码

iven_cheng @ 2023-10-12 22:38:18

#include <cstdio>
#include <ctype.h>
int main() {

char str[50];
int num[11], i, j=0,sum=0,mmod= 0;
scanf("%s",str);

for (i = 0; str[i] != '\0'; i++) 
{
    if (isdigit(str[i]))
    {
    num[j++] = str[i]-'0';
    }

}
//printf("%d\n",j);
if(j!=10)
{

num[j]=10;

}
int k=1;

for(i=0;i<j;i++)
{

    sum+=num[i]*k;
    k++;

}

mmod=sum%11;
char mmmod='X';
//printf("%d\n",num[j-1]);
//printf("%d\n",mmod);
if(mmod!=10)
{
    if(mmod==num[j])
    printf("Right");
    else
    {
    printf("%d-%d%d%d-%d%d%d%d%d-%d",num[0],num[1],num[2],num[3],num[4] ,num[5] ,num[6] ,num[7] ,num[8],mmod);
    }

}else
    printf("%d-%d%d%d-%d%d%d%d%d-%c",num[0],num[1],num[2],num[3],num[4] ,num[5] ,num[6] ,num[7] ,num[8],mmmod);
return 0;
 }

到底哪里不对啊,我做的三个例子都是对的求求大神不吝赐教,再次感激大伙

in out

附用例
0-670-82162-X 0-670-82162-4
0-670-82162-4 Right
0-670-82162-0 0-670-82162-4

by rensiwei @ 2023-10-15 09:52:54

用那么麻烦吗? 25行结束

#include<iostream>
using namespace std;
char a[100];
int b[100],cnt=1,sum=0;
int main() {
    cin>>a;
    for(int i=0; i<11; i++) 
        if(a[i]>='0'&&a[i]<='9') {
            sum+=(a[i]-48)*cnt;
            cnt++;
        }
    sum%=11;
    if((sum!=10&&sum==a[12]-48)||(sum==10&&a[12]=='X')) 
        cout<<"Right";
     else {
        for(int i=0; i<=11; i++) {
            cout<<a[i];
        }
        if(sum!=10)
            cout<<sum;
        else
            cout<<"X";
    }
    return 0;
}

by iven_cheng @ 2023-10-16 08:49:21

@rensiwei 大佬,怎么才能学会这种流畅的思路啊QAQ


by rensiwei @ 2023-10-16 19:19:18

@iven_cheng 我觉得很简单呀,我其实一开始也是用的你这种思路。不过我给你看了看这个代码,你这个好像在判断if(mmod==10)是没考虑到if(mmod==num[j]) 你的样例也没测到。在此请求加入我的团队,谢谢


|