1. 程式人生 > 其它 >LuoguP7379 [COCI2018-2019#6] Lun 題解

LuoguP7379 [COCI2018-2019#6] Lun 題解

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;
}