首页 > 试题广场 >

变种水仙花

[编程题]变种水仙花
  • 热度指数:68611 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

变种水仙花数 - Lily Number:把任意的数字,从中间拆分成两个数字,比如1461 可以拆分成(1和461),(14和61),(146和1),如果所有拆分后的乘积之和等于自身,则是一个Lily Number。

例如:

655 = 6 * 55 + 65 * 5

1461 = 1*461 + 14*61 + 146*1

求出 5位数中的所有 Lily Number。


输入描述:


输出描述:
一行,5位数中的所有 Lily Number,每两个数之间间隔一个空格。
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int sum1 = 0,sum2 = 0,n = 10,m = 0;
        for (int i = 10000; i <= 99999; i++) {
            int tmp = i;
            while (n < 100001){  //循环控制次数
                m = tmp % n; //m是右边的数
                tmp = tmp/n; //tmp是左边的数
                sum1 = m * tmp; //sum1是每次的乘积
                n = n*10; // n控制位数
                sum2 += sum1; //sum2每次加和
                tmp = i; //初始化
            }
            if (i == sum2){
                System.out.print(i + " ");
            }
            n = 10;
            sum2 = 0;
        }
    }
}

发表于 2024-08-08 20:00:40 回复(0)
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        for (int i = 10000; i < 100000; i++) {
            String number = Integer.toString(i);
            //System.out.println(number);
            int sum =0;
            for (int j = 1; j < number.length(); j++) {
                int a = Integer.parseInt(number.substring(0,j));
                int b = Integer.parseInt(number.substring(j , number.length()));
                //System.out.printf("%d %d\n",a,b);
                sum += a*b;
            }
            if(sum==i){
                System.out.printf("%d ",i);
            }

        }
    }
}
发表于 2024-05-14 11:20:17 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        for (int i = 10000; i <= 99999; i++) {
            if(lily(i)) {
                System.out.print(i+" ");
            }
        }
    }
    static boolean lily(int x) {
        int sum = 0;
        int y = x;
        String xStr = String.valueOf(x);
        for (int i = 1; i <= 4; i++) {
            int head = Integer.parseInt(xStr.substring(0, i));
            int tail = Integer.parseInt(xStr.substring(i));
            sum += head * tail;
        }
        if (sum == y ) {
            return true ;
        }
        return false;
    }
}

编辑于 2024-03-01 14:42:53 回复(0)
import java.util.Scanner;
import java.util.ArrayList;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        ArrayList<Integer> array=new ArrayList<Integer>();

        for(int i=10000;i<=99999;i++){
            int a=(i/10000)*(i%10000);
            int b=(i/1000)*(i%1000);
            int c=(i/100)*(i%100);
            int d=(i/10)*(i%10);
            if(i==(a+b+c+d)){
                array.add(i);
            }
        }
        for(int i=0;i<array.size();i++){
            System.out.print(array.get(i)+" ");
        }
        
    }
}

发表于 2022-10-30 21:20:41 回复(0)
public class Main{
    public static void main(String[] args){
        for(int i=10000;i<100000;i++){
            if(lilyNum(i)) System.out.printf("%d ",i);
        }
        
    }
    public static boolean lilyNum(int x){
        int count=0;
        for(int i=10;i<=10000;i*=10){
            count+=(int)(x%i)*(x/i);
        }
        return count==x?true:false;
    }
}

发表于 2022-08-30 19:56:16 回复(0)
import java.util.*;
public class Main {
    public static void main(String[] arg) {
   for (int i = 10000 ; i < 100000; i++) {
        int a = i / 10000;
        int a1 = (i - a * 10000) * a;
        int b = i / 1000;
        int b1 = (i - b * 1000) * b;
        int c = i / 100;
        int c1 = (i - c * 100) * c;
        int d = i / 10;
        int d1 = (i % 10) * d;
        int num = a1 + b1 + c1 + d1;
      if ( num == i) {
            System.out.printf(i+" ");
      }
    }
}
}

发表于 2022-07-05 11:54:22 回复(1)
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        //while(scanner.hasNext()){
            for(int i = 10000;i < 100000;i++){
                int a = (i / 10000) * (i % 10000);
                int b = (i / 1000) * (i % 1000);
                int c = (i / 100) * (i % 100);
                int d = (i / 10) * (i % 10);
                if(i == (a + b + c + d)){
                    System.out.print(i + " ");
                }
            }
        //}
    }
}

发表于 2022-06-28 11:34:09 回复(0)
public class Main{
public static void main(String love[]){
    for(int i=10000;i<100000;i++){
           int a=(i/10000)*(i%10000);
           int b=(i/1000)*(i%1000);
           int c=(i/100)*(i%100);
           int d=(i/10)*(i%10);
        if(a+b+c+d==i)
        {
            System.out.print(i+" ");
        }
    }
} 
}

发表于 2022-05-09 13:04:12 回复(0)
/**
 * @Title: 变种水仙花
 * @Remark: 变种水仙花数 - Lily Number:把任意的数字,从中间拆分成两个数字,比如1461 可以拆分成(1和461),(14和61),(146和1),如果所有拆分后的乘积之和等于自身,则是一个Lily Number。
 * @Author: ijunfu
 * @Version: 1.0.0
 * @Date: 2022-03-18
 */
public class Main {

    public static void main(String[] args) {

        for(int i=10000; i<99999; i++) {
            int sum = 0;
            String numStr = String.valueOf(i);

            for(int j=1; j<5; j++) {
                int prefix = Integer.parseInt(numStr.substring(0, j));
                int suffix = Integer.parseInt(numStr.substring(j));

                sum += prefix * suffix;
            }

            if(i == sum) System.out.print(i + " ");
        }

    }
}


发表于 2022-03-18 22:54:17 回复(0)
//很容易就可以看懂的代码
import java.util.*;
public class Main{
     public static void main(String[] args) {
        for (int i = 10000;i < 100000;i++) {
            int sum = 0;
            String s = Integer.toString(i);
            for (int j = 1; j < 5; j++) {
                int pre = Integer.parseInt(s.substring(0,j));
                int end = Integer.parseInt(s.substring(j,s.length()));
                sum+= pre*end;
            }
            if (sum == i){
                System.out.print(i+" ");
            }
        }
    }
}

发表于 2021-11-27 23:52:32 回复(0)
public class Main{
    public static void main(String[] args){
        for(int i=10000;i<=99999;i++){
            if(isLilyNumber(i)){
                System.out.print(i+" ");
            }
        }

    }

    public static boolean isLilyNumber(int n){
        //23456
        int sum = n%10000*(n/10000)+n%1000*(n/1000)+n%100*(n/100)+n%10*(n/10);
        if(n==sum){
            return true;
        }
        return false;
    }
}

发表于 2021-09-03 10:40:12 回复(0)
public class Main{
    public static void main(String args[]){
        for(int i=10000;i<100000;i++){
            int n=i/10000,m=i%10000;
            int k=i/1000,j=i%1000;
            int g=i/100,l=i%100;
            int a=i/10,z=i%10;
            if(n*m + k*j + g*l + a*z==i){
                System.out.print(i+" ");
            }
            
        }
    }
}
发表于 2021-07-28 20:21:54 回复(0)
public class Main{
    public static void main(String[] args){
        int num = 10000;
        int a;
        int b;
        while (num < 99999){
            int sum = 0;
            for (int i = 0; i < 4; i++){
                // 先转换成字符串,再分别分割求和
                a = Integer.parseInt(String.valueOf(num).substring(0, 4 - i));
                b = Integer.parseInt(String.valueOf(num).substring(4 - i));
                sum += a * b;
            }
            if (sum == num){
                System.out.print(num + " ");
            }
            num++;
        }
    }
}

发表于 2021-01-13 11:52:29 回复(0)

public class Main{
    public static void main(String[] args){
        for(int num=10000;num<100000;num++){
            int a=num/10000;
            int a1=num%10000;
            int b=num/1000;
            int b1=num%1000;
            int c=num/100;
            int c1=num%100;
            int d=num/10;
            int d1=num%10;
            int sum=a*a1+b*b1+c*c1+d*d1;
            if(sum==num){
                System.out.print(sum+" ");
                }
            }
    }
}
发表于 2020-09-14 12:33:48 回复(0)
public class Main {
    public static void main(String[] args) {
        int a,b,c,d,e;
        int r1,r2,r3,r4;

        for (int i = 10000; i < 99999; i++) {
            r1=(i/10000)*(i%10000);
            r2=(i/1000)*(i%1000);
            r3=(i/100)*(i%100);
            r4=(i/10)*(i%10);

            if(i==(r1+r2+r3+r4)){
                System.out.print(i);
                System.out.print(" ");
            }

        }
Java的通过代码全是直接输出 真丢人
编辑于 2020-10-14 15:23:09 回复(0)
public class Main {
    public static void main(String[] args) {
        for (int i = 10000; i < 100000; i++) {
            /**
             * 步骤1:取出i中万位,千位,百位,十位,个位的数字
             * */
            int tenThousand = i / 10000;
            int thousand = (i / 1000) % 10;
            int hundred = (i / 100) % 10;
            int ten = (i / 10) % 10;
            int individual = i % 10;
            /**
             * 步骤2:水仙花数计算
             * */
            int num = (tenThousand*1)*(thousand*1000+hundred*100+ten*10+individual*1)+
                    (tenThousand*10+thousand*1)*(hundred*100+ten*10+individual*1)+
                    (tenThousand*100+thousand*10+hundred*1)*(ten*10+individual*1)+
                    (tenThousand*1000+thousand*100+hundred*10+ten*1)*(individual*1);
            if (num == i){
                System.out.print(num + " ");
            }
        }
    }
}
应该还可以把输入转化为字符串然后用subString直接进行切割得到各个位置的数字
发表于 2020-07-29 10:26:31 回复(0)