PAT( (Basic Level) Practice (中文))-1091 (每日一解)

1091 N-自守数 (15 分)

如果某个数 K 的平方乘以 N 以后,结果的末尾几位数等于 K,那么就称这个数为“N-自守数”。例如 3×92​2​​=25392,而 25392 的末尾两位正好是 92,所以 92 是一个 3-自守数。

本题就请你编写程序判断一个给定的数字是否关于某个 N 是 N-自守数。

输入格式:

输入在第一行中给出正整数 M(≤20),随后一行给出 M 个待检测的、不超过 1000 的正整数。

输出格式:

对每个需要检测的数字,如果它是 N-自守数就在一行中输出最小的 N 和 NK​2​​ 的值,以一个空格隔开;否则输出 No。注意题目保证 N<10。

输入样例:

3
92 5 233

输出样例:

3 25392
1 25
No

欢迎来到PAT每日详解 ,我是Eli(昵称),今天是我们的第二次解题,由于今天课比较多,我就没有去好好想想更为简便的算法。 

通过我的查阅,我觉得大多数的解题思路都是通过字符分割来处理题目中的结果的末尾与乘数K相等的问题,而我却用了傻瓜法,在if语句里面,将末位相等的3种情况全部列出,有点投机取巧,但是解决起来更加快速方便,省去了一些不必要的麻烦。由于是15分的题我就不废话了,还是老规矩,直接上代码

import java.util.Scanner;

public class Main {
    public static int NNum(int x) {
        int sqrt;
        int result;
        int flag = 0;
        for (int i = 1; i < 10; i++) {
            sqrt = x * x;
            result = sqrt * i;
            if ((result % 1000) == x || (result % 100) == x || (result % 10) == x) {
                flag = i;
                break;
            } else {
                flag = 0;
            }
        }
        return flag;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int M = sc.nextInt();
        int array[] = new int[M];
        for (int i = 0; i < M; i++) {
            array[i] = sc.nextInt();
        }
        for (int i = 0; i < M; i++) {
            if (NNum(array[i]) != 0) {
                System.out.println(NNum(array[i]) + " " + NNum(array[i]) * array[i] * array[i]);
            } else {
                System.out.println("No");
            }
        }
    }
}
#include 

int NNum(int x) {
    int flag,result;
    for (int i = 1; i < 10; ++i) {
        result = i*x*x;
        if ((result % 1000) == x || (result % 100) == x || (result % 10) == x){
            flag = i;
            break;
        } else
            flag = 0;
    }
    return flag;
}
int main() {
    int M;
    scanf("%d",&M);
    int array[M];
    for (int i = 0; i < M; ++i) {
        scanf("%d",&array[i]);
    }
    for (int i = 0; i < M; i++) {
        int flag = NNum(array[i]);
        if (flag != 0) {
        printf("%d %d\n",flag,flag*array[i]*array[i]);
        } else
            printf("No\n");
    }
    return 0;
}

 

PS:Python的解题代码后期补上

你可能感兴趣的:(PAT,Java,Python)