LuoguP7379 [COCI2018-2019#6] Lun 题解
Content
判断使一个长度为 \(n\) 的银行卡号码(有一个空缺)合法,空缺里面填入的最小数字。
数据范围:\(n\in[1,100]\)。
Solution
由于只有一个空缺,因此我们可以考虑直接枚举 \(0\sim 9\),一旦试出使银行卡号码合法的数字直接输出答案即可。
判断合法建议使用函数,见以下的代码实现。
Code
int n;
string s;
void judge(string s, int place) {
int sum = 0;
for(int i = n - 2; i >= 0; --i) {
if(!(((n - 2) - i) % 2)) {
int x = (s[i] - '0') * 2;
int num = x / 10 + x % 10;
sum += num;
} else {
int x = s[i] - '0';
sum += x;
}
}
if(sum * 9 % 10 == (s[n - 1] - '0')) {printf("%c", s[place]); exit(0);}
return;
}
int main() {
scanf("%d", &n); cin >> s;
for(int i = 0; i < n; ++i) {
if(s[i] == 'x') {
for(int j = 0; j <= 9; ++j) {
s[i] = j + '0';
judge(s, i);
}
}
}
return 0;
}

浙公网安备 33010602011771号