接下来?
查看原帖
接下来?
939955
chatGPS楼主2023/5/30 14:50

我的代码思路是枚举2 ~ 99999所有质数, 再判断是否符合要求。 但样例都不对,判断是as函数中没有考虑到前导零的情况, 但不知道怎么改, 请教大佬。

#include <bits/stdc++.h>
using namespace std;
int as(int sum, int n){ // 需要拨动多少次。 
	int ans = 0;
	while(sum != 0){
		int t = sum % 10;
		int t2 = n % 10;
		if(t < t2){
			ans += t + 10 - t2;
		}else{
			ans += t - t2;
		}
		sum /= 10;
		n /= 10; 
	}
	return ans;
}
int sushu(int n){
	for(int i = 2; i * i <= n; i++){
		if(n % i == 0) return 0;
	}
	return 1;
}
int main(){
	string a;
	cin >> a;
	int cha = 100000;
	int ans = (a[0] - '0') * 10000 + (a[1] - '0') * 1000 + (a[2] - '0') * 100 + (a[3] - '0') * 10 + (a[4] - '0');
	// ans 保存原先没有动过的密码 
	int sum = ans;
	// 将 ans 赋值 sum。 
	if(sushu(ans) == 1){
		cout << ans;
		return 0;
	} // 特判 
	for(int i = 2; i <= 99999; i++){
		if(sushu(i) == 1){
			if(as(sum, i) > cha) continue;
			cha = as(sum, i);
			ans = i;
		}
	}
	if(ans < 10000) cout << 0; // 前导零 
	if(ans < 1000) cout << 0;
	if(ans < 100) cout << 0;
	if(ans < 10) cout << 0;
	cout << ans; // 输出 
	return 0;
}
2023/5/30 14:50
加载中...