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;
}
posted @ 2021-12-16 14:27  Eason_AC  阅读(58)  评论(0)    收藏  举报