首页 > 试题广场 >

水仙花数

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

春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3。 现在要求输出所有在m和n范围内的水仙花数。


输入描述:
输入数据有多组,每组占一行,包括两个整数m和n(100<=m<=n<=999)。


输出描述:
对于每个测试实例,要求输出所有在给定范围内的水仙花数,就是说,输出的水仙花数必须大于等于m,并且小于等于n,如果有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开;如果给定的范围内不存在水仙花数,则输出no;每个测试实例的输出占一行。
示例1

输入

100 120 
300 380

输出

no
370 371
package main

import (
    "fmt"
)

func main() {
    var m,n int
    for{
        _,err:=fmt.Scan(&m,&n)
        if err!=nil{
            break
        }
        ans:=[]int{}
        for i:=m;i<=n;i++{
            if check(i){
                ans=append(ans,i)
            }
        }
        if len(ans)==0{
            fmt.Println("no")
        }else{
            for _,x:=range ans{
                fmt.Printf("%v ",x)
            }
            fmt.Println()
        }
    }
}

func check(x int)bool{
    ori:=x
    sum:=0
    for x>0{
        y:=x%10
        sum+=y*y*y
        x/=10
    }
    return sum==ori
}

发表于 2023-03-04 19:43:57 回复(0)
package main

import(
    "fmt"
    "io"
)

func main(){
    m,n := 0,0
    _,err:=fmt.Scan(&m,&n)
    for err!=io.EOF{
        ans:=[]int{}
        flag:=false
        for m<=n{
            
            hund:=m/100
            ten:=(m-hund*100)/10
            one:=m-hund*100-ten*10
            arr:=[3]int{hund,ten,one}
            
            if m==arr[0]*arr[0]*arr[0]+arr[1]*arr[1]*arr[1]+arr[2]*arr[2]*arr[2]{
                ans=append(ans,m)
                flag=true
            }
            m++
        }
        if !flag{
            fmt.Println("no")
        }else{
            for _,v:=range ans{
                fmt.Print(v)
                fmt.Print(" ")
            }
            fmt.Println()
        }
   
        _,err=fmt.Scan(&m,&n)
    }
}

发表于 2022-04-10 07:58:34 回复(0)