测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

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; }
上一题 下一题