B3730 题解

· · 题解

B3730 题解

前言

题解区没有的思路。

题意

给你一串五位密码,问哪个五位质数密码要扭最少次数才能扭到。

思路

遍历 99999 以内的所有数字,如果是质数,就算出要扭多少次才能扭到相应密码,最后次数取最小值即可。

代码

#include<iostream>
using namespace std; 
int a[6],b[6],c[6],sum = 1e9; 
bool isPrime(int n)//判断质数
{
    if (n < 2)
    {
        return 0;
    } 
    for (int i = 2; i <= n/i; i++)
    {
        if (n % i == 0)
        {
            return 0;
        }
    }
    return true;
}

int main() 
{   
    for (int i = 1; i <= 5; i++)
    {
        scanf("%1d", a + i);
    }
    for (int i = 0; i <= 99999; i++)//遍历
    {
        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;
            int cnt = 0;
            for (int j = 1; j <= 5; j++)
            {
                cnt += min((a[j] - b[j] + 10) % 10, (b[j] - a[j] + 10) % 10);   
            }//就算出要扭多少次才能扭到相应密码
            if (cnt <= sum)
            {
                for (int j = 1; j <= 5; j++)
                {
                    c[j] = b[j];
                } 
                sum = cnt;//记录,取最小值
            }
        }       
    }

    for (int i = 1; i <= 5; i++)
    {
        cout<<c[i];
    }
    return 0;
}

有问题私信我哦。