洛谷 P1055 ISBN号码 题解

P1055 ISBN号码

题目


Main Idea:

    按照题目提示判断输入的ISBN号码中识别码是否正确。

Summary:

    1.同一条判断语句中,已执行的部分若有自增自减,则下一次自增自减是在前面已经自增自减的基础上进行的 

Problem Solving Idea:

    模拟题意。

AC代码(version 1):

#include<bits/stdc++.h>
using namespace std;
char a[15];
int main()
{
	int mark1=0,mark2=0,mod=0,flag=1;
	memset(a,'',sizeof(a));
	scanf("%s",a);
	for(int i=0;i<13;i++){
		if(a[i]>=48&&a[i]<=57&&mark2<3){
			mod+=(++mark1)*(a[i]-'0');
		}
		else if(a[i]=='-')	mark2++;
		if(mark2==3&&((mod%11==(a[++i]-'0'))||(mod%11==10&&a[12]=='X'))){//这里深坑。。。同一条判断语句中,已执行的部分若有自增自减,则下一次自增自减是在前面已经自增自减的基础上进行的 
				flag=1;
				break;
		}
		if(mark2==3&&((mod%11!=(a[++i]-'0')&&mod%11!=10)||mod%11==10&&a[12]!='X')){
			flag=0;
			break;
		}
	}
	if(flag)	cout<<"Right";
	else{
		for(int i=0;i<12;i++)	cout<<a[i];
		if(mod%11==10)	cout<<'X';
		else cout<<mod%11;
	}
    return 0;
}

AC代码(version 2):

#include <bits/stdc++.h>
int main(){
  char a[14], mod[12] = "0123456789X"; //先将mod11后的十一个字符存入数组
  gets(a); //输入字符串
  int i, j = 1, t = 0;
  for(i = 0; i < 12; i++) {
        if(a[i] == '-') continue; 
    t += (a[i]-'0')*j++; 
  }
  if(mod[t%11] == a[12]) printf("Right");
  else {
      a[12] = mod[t%11];
      puts(a);
  }
  return 0;
}
原文地址:https://www.cnblogs.com/Fhr2001/p/12032777.html