Problem 08 水仙花数

本文深入探讨了水仙花数的定义与特性,提供了两种高效查找算法的详细实现,包括遍历验证与预设值匹配,适用于快速找出指定范围内所有水仙花数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 题目描述:

“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3。现在要求输出所有在m和n范围内的水仙花数。

  • 思路1:

依次检验m到n中每一个元素,是否满足条件要求,并用数组储存及输出。

  • 思路2:

其实符合条件的水仙花数也无非是:153,370,371,407.判断这四个数是否在输入区间内便行。

  • 细节:

1).注意到需要一个变量来表示是否有水仙花数,所以这个变量需要在每次循环时重新初始化,注意行末无多余空格。

2).第二种思路,比较难操作的地方就是对于是否输出空格,这里采取的方法是检验下一个水仙花数是否也在区间内。所以储存水仙花数的数组不仅仅只有4个数。

  • 源代码1:
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int a[1010];
    int main()
    {
    int n,m,i,flag=0,sum=0,b,c,d;
    for(i=100;i<1000;i++)
    {
    b=i%10,c=(i/10)%10,d=i/100;
    if(i==b*b*b+c*c*c+d*d*d)
    a[i]=1;
         }
     while(cin>>n>>m)
     {
     sum=0,flag=0;
     for(i=n;i<=m;i++)
         {
         if(a[i]&&!flag)
         {
         flag=1;
         cout<<i;
     sum++;
         }
         else if(a[i]&&flag)
        {
     cout<<" "<<i;
         sum++;
    }
    }
     if(sum==0)
     cout<<"no";
     cout<<endl;
         
    }
    }
    

     

  • 源代码2:
    #include<iostream>
    using namespace std;
    int main ()
    {
        int a[5]={153,370,371,407,1005};
        int n,m;
        while(cin>>m>>n)
        {
            int b=1;
            for(int i=0;i<4;i++)
            {
                if(a[i]<=n&&a[i]>=m)
                {
                    b=0;
                    cout<<a[i];
                    if(a[i+1]<=n&&a[i+1]>=m)
                    cout<<' ';
                }
            }
            if(b)
            cout<<"no";
            cout<<endl;
        }
        return 0;
    }
     
    

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值