首页 > 试题广场 >

变种水仙花

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

变种水仙花数 - 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,每两个数之间间隔一个空格。
#include<stdio.h>
#include<math.h>
int main()
{
    int n;
    int part1=0;
    int part2=0;
    int sum=0;
    for(n=10000;n<100000;n++)
    {
      for(int i=1;i<6;i++)
      {
          part1=n/(int)pow(10,i);
          part2=n%(int)pow(10,i);
          sum+=part1*part2;
      }
       if(n==sum)
        printf("%d ",n);
        
        sum=0;
        
    }
    
        
    return 0;
        
}

发表于 2022-05-12 12:09:31 回复(0)
#include <iostream>
using namespace std;

int main()
{
     int a,b,c,d,e,num;
     for(int num=10000;num<1000000;num++){
     e=num%10;
     d=num/10%10;
     c=num/10/10%10;
     b=num/10/10/10%10;
     a=num/10/10/10/10%10;
     int t1,t2,t3,t4;
     t1=a*(1000*b+100*c+10*d+e);
     t2=(10*a+b)*(100*c+10*d+e);
     t3=(100*a+10*b+c)*(10*d+e);
     t4=(1000*a+100*b+10*c)*e;
     if(num==t1+t2+t3+t4){
     cout<<num<<" ";
     }
     
     }
 return 0;
}

发表于 2022-03-03 14:52:36 回复(0)
#include <iostream>
using namespace std;
bool flower(int n)
{
    int x = n, sum = 0, k = 10;
    while (n / k)
    {
        sum += (n / k) * (n % k);
        k *= 10;
    }
    if (sum == x) return true;
    return false;
}

int main()
{
    for (int i = 10000; i <= 99999; i ++ )
    {
        if (flower(i)) cout << i << ' ';
    }
}

发表于 2022-02-26 14:21:55 回复(0)
#include <stdio.h>
int main()
{
	int i = 0;
	int num1 = 0;
	int num2 = 0;
	for (i = 10000; i < 100000; i++)
	{
		int n = 4;
		int j = 10;
		int sum = 0;
		while (n--)
		{
			num1 = i % j;
			num2 = i / j;
			sum += num1 * num2;
			j *= 10;
		}
		if (i == sum)
		{
			printf("%d ", i);
		}
	}
	return 0;
}

发表于 2022-02-17 18:14:07 回复(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)
其实可以全写到if里面去
int main()
{
    long a,a1,a2,a3,a4;
    for(a=10000;a<99999;a++)
    {
        a1=a/10000*(a%10000);
        a2=a/1000*(a%1000);
        a3=a/100*(a%100);
        a4=a/10*(a%10);
        if(a==(a1+a2+a3+a4))
            printf("%d ",a);
         
    }
    return 0;
}

发表于 2021-10-22 10:13:13 回复(0)
int main()
{
    int g,g2;  //从个位之前的位置拆
    int s,s2; //从千位之前的位置拆
    int b,b2; //从百位之前的位置拆
    int q,q2; //从千位之前的位置拆
    int sum;  
    
    
    for (int num = 10000;num<100000;num++)
    {
        g = num % 10;      g2 = num /10;
        s = num % 100;    s2 = num /100;
        b = num % 1000;   b2 = num/1000;
        q = num % 10000; q2 = num/10000;
        sum = g*g2 + s*s2 + b*b2 + q*q2;
        if(sum == num)
        {
            printf("%d ",num);
        }
    }
    return 0;
}

发表于 2021-08-29 02:10:50 回复(0)
num = 10000
for num in range(10000,100000):
    lily_num = (num // 10000) * (num % 10000) + (num // 1000) * (num % 1000) + (num // 100) * (num % 100) + (num // 10) * (num % 10)
    if num == lily_num:
        print(num,end=' ')

发表于 2021-08-21 23:58:31 回复(0)
# 思路是 除以10000,1000,100,10拆分开。
for i in range(10000,100000):
    s = (i//10000)*(i%10000) + (i//1000)*(i%1000) + (i//100)*(i%100) + (i//10)*(i%10)
    if s ==i:
        print(s,end=' ')

发表于 2021-08-20 15:49:53 回复(1)
#include<stdio.h>
int main()
{
    int a1,a4,b2,b3,c3,c2,d4,d1;
    for(int i=10000;i<100000;i++)
    {
        a1=i/10000;a4=i%10000;
        b2=i/1000;b3=i%1000;
        c3=i/100;c2=i%100;
        d4=i/10;d1=i%10;
        if(i==a1*a4+b2*b3+c3*c2+d4*d1)
            printf("%d ",i);
    }
    return 0;
}

发表于 2021-07-07 15:37:02 回复(0)
import java.util.*;
public class Main
{
    public static void main(String [] args)
    {
            //不用输入,直接给所有5位数
            for(int i=10000;i<100000;i++){
                //转成字符串
                String str = Integer.toString(i);
                //再将数组切割成不同大小乘积
                int a1 = Integer.parseInt(str.substring(0,1));
                int a2 = Integer.parseInt(str.substring(1));
                int b1 = Integer.parseInt(str.substring(0,2));
                int b2 = Integer.parseInt(str.substring(2));
                int c1 = Integer.parseInt(str.substring(0,3));
                int c2 = Integer.parseInt(str.substring(3));
                int d1 = Integer.parseInt(str.substring(0,4));
                int d2 = Integer.parseInt(str.substring(4));
                //判断
                if(i==a1*a2+b1*b2+c1*c2+d1*d2){
                    System.out.printf(i+" ");
                }
            }
        
    }
}

发表于 2020-09-22 11:02:09 回复(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)
#include <stdio.h>
#include <math.h>
int main(){
    int a;
    int i;
    int part1, part2;
    int sum = 0;
    for (a = 10000; a < 100000; a++){
        for(i=1;i < 6; i++)
        {
            part1 = a/(int)pow(10,i);
            part2 = a%(int)pow(10,i);
            sum = sum + part1*part2;
        }
        if (a == sum){
            printf("%d ",a);
        }
        sum = 0;
    }
    return 0;
}

编辑于 2020-03-17 10:27:14 回复(1)
#include <stdio.h>
int main()
{
    int i;
    for(i=10000;i<100000;i++)
    {
    if (i==(i/10000)*(i%10000)+(i/1000)*(i%1000)+(i/100)*(i%100)+(i/10)*(i%10))
    printf("%d ",i);
    }
    return 0;
}

发表于 2021-09-28 19:14:15 回复(0)
#include<stdio.h>
int main()
{    
    int i =0;
    for(i=10000;i<=99999;i++)
    {
        int j =10000;
        int sum = 0;
        while(j)
        {
            sum+=(i/j)*(i%j);
            j/=10;
        }
        if(i==sum)
        {
            printf("%d ",i);
        }
    }
    
}

发表于 2021-05-16 09:47:39 回复(0)
for n in range(10000,99999):
    m=n
    n=str(n)
    for i in range(1,len(n)):
        m-=int(n[:i])*int(n[i:])
    if m==0:
        print(n,end=' ')

发表于 2020-11-27 00:10:44 回复(0)
#include<iostream>
using namespace std;

bool Is_lily(int i)
{
    int sum=0;
    for(int j=10;j<=10000;j*=10)
        sum+=(i/j)*(i%j);
    if(sum==i)
        return true;
    else
        return false;
}
int main()
{
     for(int i = 10000;i<100000;i++)
     {
         if(Is_lily(i))
             cout<<i<<" ";
     }
    cout<<endl;
    return 0;
}

发表于 2020-07-26 14:05:24 回复(1)
#include <stdio.h>
int main()
{
    int i;
    for(i=10000;i<100000;i++)
    {
        if(i==((i/10000)*(i%10000))+((i/1000)*(i%1000))+((i/100)*(i%100))+((i/10)*(i%10)))
           printf("%d ",i);
    }
}

发表于 2020-04-12 22:02:22 回复(0)
输入数据转换为str,切分
for i in range(10000,100000):
    a = 0
    for j in range(1,5):
        a += int(str(i)[:j]) * int(str(i)[j:])
    if i==a:
        print(i,end=' ')


编辑于 2024-02-05 10:02:50 回复(0)
#include<stdio.h>
int main(){
    int i1,i2,i3,i4,i5,new_num,k;
    for(int i=10000;i<=99999;i++){
        k = 10;
        new_num = 0;
        for (int j=1;j<=4;j++){
            new_num +=  (i/k)*(i%k);   
            k *= 10;
        }
        if (i == new_num) printf("%d ",i);
    }
}

发表于 2022-07-26 17:09:48 回复(0)