小猴编程周赛C++ | 2023年秋第2周T3智能密码锁

学习C++从娃娃抓起!记录下在学而思小猴编程学习过程中的题目,记录每一个瞬间。侵权即删,谢谢支持!

附上汇总贴:小猴编程C++ | 汇总-CSDN博客


【题目描述】

小猴有一个智能密码锁,密码锁是由 5 个轮子组成,每个轮子上都写着数字 0∼9。在第 i 轮子上,他可以拨动轮子移动。每次移动有两种类型:

① 向上移动:表示将第 i 个数字向上移动 1 步,数字 9 向上移动之后会回到数字 0;

② 向下移动:表示将第 i 个数字向下移动 1 步,数字 0 向下移动之后会回到数字 9。

如上图所示,密码锁显示的数字序列是 0,0,0,0,0。

智能密码锁新颖的点在于,如果 5 个轮子上的数字按照从左到右的顺序组成的整数是质数时,密码锁就可以被打开了。

现在小猴带着你一起参观他的智能密码锁,小猴真正给你演示密码锁的使用,为了更快的打开密码锁,请你帮助小猴计算最少需要多少次移动才能打开密码锁。

【输入】

一行,包含一个五位数(可能含有前导 0),表示密码锁初始时从左到右五个轮子上显示的数字。

【输出】

一行,包含一个五位数(可能含有前导 0),表示打开密码锁通过最少的移动次数得到的质数。如果有多种可能,输出满足条件的最大整数。

【输入样例】

10004

【输出样例】

11003

【代码详解】

#include <bits/stdc++.h>
#include <cmath>
using namespace std;
int a[10] = {0};
int b[10] = {0};
int ans[10] = {0};
bool isPrime(int n)
{
    if (n<2) return false;
    for (int i=2; i<=sqrt(n); i++) {
        if (n%i==0) return false;
    }
    return true;
}
int main()
{
    int move=0, minn=1e9, maxn=-1e9;
    for (int i=1; i<=5; i++) {
        scanf("%1d", &a[i]);
    }
    for (int i=1; i<=99999; i++) {
        int cnt = 0;
        if (isPrime(i)) {
            b[1] = i/10000; b[2] = i/1000%10; b[3] = i/100%10; b[4] = i/10%10; b[5] = i%10;
            for (int j=1; j<=5; j++) {
                cnt += min((a[j]-b[j]+10)%10, (b[j]-a[j]+10)%10);
            }
            if (cnt <= minn) {
                minn = cnt;
                if (i>maxn) {
                    maxn = i;
                    ans[1] = i/10000; ans[2] = i/1000%10; ans[3] = i/100%10; ans[4] = i/10%10; ans[5] = i%10;
                }
            }
        }
    }
    for (int i=1; i<=5; i++) {
        cout << ans[i];
    }
    return 0;
}

【运行结果】

10004
11003
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值