1 条题解
-
0
自动搬运
来自洛谷,原作者为

zct_sky
sto @jxbe6666 orz || 再起不能搬运于
2025-08-24 22:29:18,当前版本为作者最后更新于2021-11-29 18:06:37,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
思路:
有两种情况:
情况一: 在最后一位;
情况二: 不在最后一位。
如果是情况一,就按照题目直接计算 。
如果是情况二,则从 枚举 ,再计算校验码,如果校验码等于最后一位,就输出 。
代码:
#include<bits/stdc++.h> using namespace std; int l,x,b[110]; string a; int main(){ cin>>l>>a;//输入 for(int i=0;i<l;i++)//找出哪一位是x,并把其余的数存进数组 if(a[i]=='x') x=i; else b[i]=a[i]-'0'; if(x==l-1){//如果x是最后一位 int s=0; bool f=(l-1)%2; for(int i=0;i<l-1;i++){//计算x if(f^(i%2)){ b[i]*=2; int sum=0; while(b[i]) sum+=b[i]%10,b[i]/=10; s+=sum; }else s+=b[i]; } cout<<s*9%10;//输出 }else{//如果x不是最后一位 int s; bool f=(l-1)%2; for(int k=0;k<10;k++){//从0~9枚举x s=0; b[x]=k; for(int i=0;i<l-1;i++){//计算校验码 if(f^(i%2)){ int t=b[i]; b[i]*=2; int sum=0; while(b[i]) sum+=b[i]%10,b[i]/=10; b[i]=t; s+=sum; }else s+=b[i]; } if(s*9%10==b[l-1]){//如果校验码等于最后一位,输出x cout<<k; return 0; } } } return 0; }
- 1
信息
- ID
- 6480
- 时间
- 1000ms
- 内存
- 64MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者