首页 > 试题广场 >

变种水仙花

[编程题]变种水仙花
  • 热度指数: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>
int is_Lily(int a)
{
    int b = a / 10000;
    int c = a % 10000;
    int d = a / 1000;
    int e = a % 1000;
    int f = a / 100;
    int j = a % 100;
    int h = a / 10;
    int m = a % 10;
    int t = a / 1;
    int  l = a % 1;
   
    if ((b * c + d * e + f * j + h * m + t * l ) == a)
    {
        return 1;
    }
    else
    {
        return 0;
    }

}
int main() {
    int a = 10000;
for (a = 10000; a <= 99999; a++)
{
    int r = is_Lily(a);
    if (r == 1)
    {
        printf("%d ", a);
    }
   
}

   
    return 0;
}
学了这么久还是写出如此rj的代码,我怕是没救了哈哈哈
发表于 2025-03-09 13:44:47 回复(0)
#include <stdio.h>

int main() {
    for (int i=10000; i<=99999; i++) {
       int sum=0;
       for(int j=10 ; j<=10000; j=j*10){
        sum+=(i/j)*(i%j);
       }
       if (sum==i) {
         printf("%d ",i);
       }
    }
    return 0;
}
发表于 2025-02-28 22:41:30 回复(0)
#include <stdio.h>
// 12345
int main() {
    for(int i=10000;i<=99999;i++)
    {   long sum=0;
        int base=10000;
        for(int count=0;count<4;count++)
        {
            sum+=(i/base)*(i%base);
            base/=10;
        }
        if(i==sum)
        {  
            printf("%ld ",sum);
        }
    }
    return 0;
}
发表于 2025-02-10 15:14:08 回复(0)
#include <stdio.h>

int main() {
 
 
    for (int k = 10000;k < 100000;k++) {    
        int i = 0;
        int j = 10;
        while (k / j != 0) {
            i = i + (k % j) * (k / j);
            j = j * 10;
        }
        if (i == k) {
            printf("%d ", k);
        }
    }

    return 0;
}
发表于 2025-01-14 00:43:07 回复(0)
#include<stdio.h>
#include<math.h>

int main()
{
   int x = 0;
   int i = 0;
   double j = 0;
   int left = 0;
   int right = 0;
   int sum = 0;
   double cal = 0.0;
   for(i=10000;i<99999;i++)
   {
      sum = 0;
      for(j=1.0;j<5.0;j++)
      {
        cal = 0;
        cal = pow(10,j);
        left= i / cal;
        right = i - (left*cal);
        sum = sum +  left * right;
      }
      if(sum == i)
      {
        printf("%d ",i);
      }
   }

    return 0;
}

发表于 2024-12-12 15:22:47 回复(0)
#include <stdio.h>

int main() {
    int a = 0, b = 0;
    for (a = 10000; a < 100000; a++) {
        b = (a % 10) * (a / 10) + (a % 100) * (a / 100) + (a % 1000) * (a / 1000) +
            (a % 10000) * (a / 10000);
        if (a == b) {
            printf("%d ", a);
        }
    }
    return 0;
}
发表于 2024-12-01 11:23:26 回复(0)
#include <stdio.h>
#include <math.h>
int main() {
    int sum = 0;

    // 遍历所有五位数
    for (int i = 10000; i <= 99999; i++) {
        sum = 0;  // 每次计算一个新数字时,清零sum
       
        // 遍历不同的拆分方式
        for (int j = 1; j < 5; j++) {
            // n 是左边的部分,p 是右边的部分
            int n = i / (int)pow(10, j);  // 获取左边的部分
            int p = i % (int)pow(10, j);  // 获取右边的部分
           
            sum += n * p;  // 将n和p的乘积累加到sum
        }
       
        // 判断是否为Lily Number
        if (sum == i) {
            printf("%d ", i);  // 输出符合条件的Lily Number
        }
    }
    return 0;
}

发表于 2024-11-27 21:51:33 回复(0)
#include <stdio.h>

int main() {
int a,b,c,d,e;
int i;
for(i=10000;i<100000;i++)
{
    a=i/10000;//个
    b=i/1000;//前两位
    c=i/100;//前3位
    d=i/10;//前4位
    e=i%10;//最后一位
    if((a*(i%10000)+b*(i%1000)+c*(i%100)+d*e)==i)
    printf("%d ",i);
}

    return 0;
}
发表于 2024-09-15 22:42:32 回复(0)
想知道哪里错了

#include <stdio.h>

int main() {
    int b,c,d,e,f,g;
    for (int a=10000; a<=99999; a++) {
        b=a/10000;//万位
        c=a/1000%10;//千位
        d=a/100%10;//百位
        e=a/10%10;//十位
        f=a%10;//个位
        g=(b*(c*1000+d*100+e*10+f))+((b*10000+c*1000)*(d*100+e*10+f))+((b*10000+c*1000+d*100)*(e*10+f))+((b*10000+c*1000+d*100+e*10)*f);
        if (g==a) {
            printf("%d ",a);
        }
    }
    return 0;
}
发表于 2024-09-12 11:51:35 回复(1)
#include <stdio.h>
//递归,可以更高位数
int is_prime(int x,int y)
{
    if(x/y != 0)
    {
        return is_prime(x,y*10)+(x/y)*(x%y);
    }
    else
    	return 0;
}

int main()
{
    int i = 0;

    for(i = 10000; i <= 99999; i++)
    {
        if(is_prime(i,10) == i)
        {
            printf("%d ",i);
        }
    }

    return 0;
}

发表于 2024-08-09 13:23:37 回复(0)
#include <stdio.h>

int shicf(int x)
{
    if(x==0)
    {
        return 1;
    }
    if(x>0)
    {
        return 10*shicf(x-1);
    }
}

int Lily(int x)
{
    int arr[8]={0};
    int j=4;
    int sum=0;
    for(int i=0;i<4;i++)
    {
        arr[i]=x/shicf(j);
        arr[7-i]=x%shicf(j);
        j--;
    }
    for(int i=0;i<4;i++)
    {
        sum+=(arr[i]*arr[7-i]);
    }
    if(sum==x)
    {
        return 1;
    }
    else {
    return 0;
    }
}


int main() {
    for(int i=10000;i<100000;i++)
    {
        if(Lily(i)==1)
        {
            printf("%d ",i);
        }
    }
    return 0;
}
发表于 2024-07-23 23:09:12 回复(0)
#include <stdio.h>
#include<math.h>
int main() {
    for(int i=10000; i<100000; i++)
    {
        int j=0;
        int cmp=i;
        int sum=0;
        int tmp=0;
        for(j; j<=4; j++)
        {  
            tmp=tmp+(i%10)*pow(10,j);
            i=i/10;
            sum=sum+i*tmp;
            if(sum>cmp)
                break;
        }
        if(cmp==sum)
        {
            printf("%d ",cmp);
        }
        i=cmp;
    }
    return 0;
}
发表于 2024-06-02 10:32:58 回复(0)
#include<stdio.h>  int count(int i){ int num1,num2,num3,num4,res;  num1=(i%10)*(i/10);  num2=(i%100)*(i/100);  num3=(i%1000)*(i/1000);  num4=(i%10000)*(i/10000);  res=num1+num2+num3+num4;  return res; } int main() { for(int i=10000;i<=99999;i++){ if(i==count(i)){
           printf("%d ",i);  }
   } return 0; }

发表于 2024-05-31 10:51:42 回复(0)
/* 解题思路 : 遍历所有5位数
               最关键的是如何判断出是不是变种水仙花数
               方案1 打印1-9 10-99 100-999 1000-9999 
               分别打印出来 然后进行 取模 判断*/

/*又看错题目了 是5位数中所有的数字 不是1-5位数..........
这样就好办了 直接用除法和取模运算就可以了*/

# include <stdio.h>
int main ()

{
    for(int i=10000;i<=99999;i++)
    {
        int sum=(i/10000)*(i%10000)+(i/1000)*(i%1000)+(i/100)*(i%100)+(i/10)*(i%10);//存放数据
        
        if (sum==i) 
        {
            printf("%d ",i);
        }
    }

    return 0;
}

发表于 2024-05-21 23:27:30 回复(0)
#include <stdio.h>
#include<math.h>

int main()
{
	int count = 0;	//变种水花仙数
	for (int i = 12345; i <= 99999; i++)		//遍历5位数
	{
		//12345 --1 2345 12 345 123 45 1234 5	//四种拆分--从后往前算
		int n = 0;	//位数的累计
		int ret ,mid;
		ret = 0;	//位数开始为0
		mid = i;	//i的值不能改变
		count = 0;	//水花仙数要归零
		while (mid / 10)		//当mid为个位数就不用进去 	
								//mid%10对count的值没有影响但不知道为什么打印不成功
		{											//12345
			ret = (mid % 10)*(int)pow(10,n)+ret;	//5 -- 4*10+5=45 --3*100+45=345
			mid = mid / 10;
			count += (ret * mid);
			n++;
		}
		if (count == i)
			printf("%d ", count);
	}
	return 0;
}

发表于 2024-05-11 21:00:36 回复(0)