0
点赞
收藏
分享

微信扫一扫

洛谷-P1151 子数整数

题目描述

对于一个五位数a1a2a3a4a5,可将其拆分为三个子数:


例如,五位数20207可以拆分成

sub1=202

sub2=020(=20)

sub3=207

现在给定一个正整数K,要求你编程求出10000到30000之间所有满足下述条件的五位数,条件是这些五位数的三个子数sub1,sub2,sub3都可被K整除。

输入格式

一个正整数K

输出格式

每一行为一个满足条件的五位数,要求从小到大输出。不得重复输出或遗漏。如果无解,则输出“No”。

输入输出样例

输入

15

输出

22555
25555
28555
30000

解析思路

本题为拆分整数并合并的题型,可以根据以下步骤编写算法程序。

①对整数K进行拆分。由于K是5位整数,故我们可以用以下方法将其分解

arr[0] = (i / 10000);   //万
arr[1] = (i % 10000) / 1000;    //千
arr[2] = (i % 1000) / 100;  //百
arr[3] = (i % 100) / 10;    //十
arr[4] = i % 10;    //个

②每3位相和并,得出sub1,sub2,sub3 。

int i1 = arr[0];
int i2 = arr[1];
int i3 = arr[2];
int i4 = arr[3];
int i5 = arr[4];
int sub1 = i1 * 100 + i2 * 10 + i3;
int sub2 = i2 * 100 + i3 * 10 + i4;
int sub3 = i3 * 100 + i4 * 10 + i5;

③条件判断:sub1,sub2,sub3都可被K整除

boolean t = sub1 % k == 0 && sub2 % k == 0 && sub3 % k == 0;

完整代码如下:

package com.luogu;

import java.util.Scanner;

public class P1151 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int k = scanner.nextInt();
        int[] arr = new int[5];
        boolean flag = false;
        for (int i = 10000; i <= 30000; i++) {
            arr[0] = (i / 10000);   //万
            arr[1] = (i % 10000) / 1000;    //千
            arr[2] = (i % 1000) / 100;  //百
            arr[3] = (i % 100) / 10;    //十
            arr[4] = i % 10;    //个
            int i1 = arr[0];
            int i2 = arr[1];
            int i3 = arr[2];
            int i4 = arr[3];
            int i5 = arr[4];
            int sub1 = i1 * 100 + i2 * 10 + i3;
            int sub2 = i2 * 100 + i3 * 10 + i4;
            int sub3 = i3 * 100 + i4 * 10 + i5;
            if (sub1 % k == 0 && sub2 % k == 0 && sub3 % k == 0) {
                flag = true;
                System.out.println(i);
            }
        }
        if (!flag) {
            System.out.println("No");
        }


    }
}

举报

相关推荐

0 条评论