乌龟给自己的贵重物品上了密码锁。密码锁上有 5 个数字拨盘。每个数字拨盘每次向上拨使数字增加 1 (9 向上拨得到 0),向下拨使数字减少 1 (0向下拨得到 9)。
拨盘上的数字组成一个 5位数。只要拨盘上的数字变为素数,密码锁就会被解 开。素数 (又称质数) 是只能被 1 和它自身整除的大于1 的自然数。因为乌龟动作实在太慢,他希望你帮他计算如何开锁,使得拨动的总次数最少。
输入格式
一个 5 位数,表示拨盘的初始数字
输出格式
一个 5 位素数,表示开启密码锁使用的素数(拨动次数最少)。如有多组解,输出满足条件的最大数
输入/输出例子1
输入:
01212
输出:
01213
样例解释
无
思路:
这题其实直接暴力,从2枚举到99999然后判断
#include<bits/stdc++.h>
using namespace std;
bool pdzs(int n)
{
for(int i=2;i*i<=n;i++)
if(n%i==0) return 0;
return 1;
}
string a;
int minn=INT_MAX;
string mi;
int main(){
cin>>a;
for(int i=99999;i>=2;i--)
{
if(!pdzs(i)) continue;
string s="";
int x=i;
int bs=0;
while(s.size()!=5)
{
char ss=x%10+'0';
string sb="";
sb+=ss;
s=sb+s;
x/=10;
}
for(int i=0;i<5;i++)
{
if(s[i]==a[i]) continue;
int bs1,bs2;
if(s[i]>a[i]) bs1=s[i]-a[i],bs2=9-s[i]+1+a[i];
else bs1=a[i]-s[i],bs2=s[i]+1+9-a[i];
bs+=min(bs1,bs2);
}
if(bs<minn)
mi=s,minn=bs;
}
cout<<mi;
return 0;
}