A32892. 密码锁程序文件名:t2.cpp输入文件名:t2.in输出文件名:t2.out。乌龟给自己的贵重物品上了密码锁。密码锁上有5 个数字拨盘。每个数字拨盘每次向上拨使数字增加1 (9 向上拨得到0),向下拨使数字减少1 (0向下拨得到9)。拨盘上的数字组成一个5位数。只要拨盘上的数字变为素数,密码锁就会被解开。素数(又称质数) 是只能被1 和它自身整除的大于1 的自然数。因为乌龟动作实在太慢,他希望你…
填空题
困难
知识点
题目描述
密码锁
程序文件名:t2.cpp
输入文件名:t2.in
输出文件名:t2.out。
乌龟给自己的贵重物品上了密码锁。密码锁上有5 个数字拨盘。每个数字拨盘每次向上拨使数字增加1 (9 向上拨得到0),向下拨使数字减少1 (0向下拨得到9)。
拨盘上的数字组成一个5位数。只要拨盘上的数字变为素数,密码锁就会被解开。素数(又称质数) 是只能被1 和它自身整除的大于1 的自然数。因为乌龟动作实在太慢,他希望你帮他计算如何开锁,使得拨动的总次数最少。

输入
一个5 位数,表示拨盘的初始数字
输出
一个5 位素数,表示开启密码锁使用的素数
(拨动次数最少)。如有多组解,输出满足条件的最大数
样例输入
01210
样例输出
01319
参考答案
#include<bits/stdc++.h>
using namespace std;
int x,ma=1000;
int xx[10],yy[10],ans[10];
int prime(int x)
{
int i;
if(x<2)return 0;
for(i=2;i*i<=x;++i)
if(x%i==0)return 0;
return 1;
}
void check(int y)
{
int t=0,i,tot=0;
memset(yy,0,sizeof(yy));
while(y){
yy[++t]=y%10;
y/=10;
}
for(i=1;i<=5;++i)
tot+=min(abs(yy[i]-xx[i]),abs(10+xx[i]-yy[i]));
if(tot<ma){
ma=tot;
for(i=1;i<=5;++i)ans[i]=yy[i];
}
}
int main()
{
freopen("t2.in","r",stdin);
freopen("t2.out","w",stdout);
int i,t=0;
cin>>x;
while(x){
xx[++t]=x%10;
x/=10;
}
for(i=99999;i>=0;--i){
if(prime(i)==0)continue;
check(i);
}
for(i=5;i>=1;--i)cout<<ans[i];
fclose(stdin);fclose(stdout);
return 0;
}
上一题
下一题