首页 > 试题广场 >

水仙花数

[编程题]水仙花数
  • 热度指数:94992 时间限制:C/C++ 1秒,其他语言2秒 空间限制: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
#include<stdio.h>
#include<math.h>
int panduan(int num){
    int a[3] = {0};
    int ret = num;
    int sum = 0;
    for(int i = 0;i < 3;i++){
        a[i] = num % 10;
        num /= 10;
        sum += pow(a[i],3);
    }
    if(sum == ret)
        return ret;
    return -1;   
}
int main(){
    int num = 0,a = 0,b = 0,count = 0;
    while(scanf("%d %d",&a,&b)!=EOF){
        getchar();
        for(int i = a;i < b;i++){
            int ret = panduan(i);
            if(ret != EOF){
                printf("%d ",ret);
                count++;
            }
        }
        if(count == 0)
            printf("no\n");
        count = 0;
    }
    return 0;
}

发表于 2022-07-16 21:49:00 回复(1)
#include<stdio.h>
#include<math.h>

int main()
{
    int n1=0;
    int n2=0;
    while(~scanf("%d%d",&n1,&n2))
    {
        int i=0;
        int count=0;
        for( i=n1;i<=n2;i++)
        {
            int num=i;
            
            int sum=0;
            while(num)
            {
                sum=sum+pow(num%10,3);
                num/=10;
            }
            if(sum==i)
            {
                count++;
                printf("%d ",i);
            }
        }
        if(count==0)
            printf("no\n");
    }
    return 0;
}

发表于 2022-02-16 16:31:15 回复(0)
import sys
flower_set=[]
for i in range(100,1000):
    j = str(i)
    j1 = int(str(j)[0])
    j2 = int(str(j)[1])
    j3 = int(str(j)[2])
    if i == j1**3+j2**3+j3**3:
        flower_set.append(i)
def flower(m,n):
    need = []
    for i in flower_set:
        if (i>=m)&(i<=n):
            need.append(i)
    if len(need)>0:
        return ' '.join(map(str,need))
    else:
        return 'no'
    
for line in sys.stdin.readlines():
    m,n = map(int, line.strip().split())
    print (flower(m,n))

发表于 2018-11-07 13:09:23 回复(0)
#include "iostream"
using namespace std;

int main()
{
    int so, it;
    while (scanf("%d %d", &so, &it) != EOF) {
        bool flag=0;
        for (int i = so; i < it; i++) {
            int a, b, c;
            a = i / 100;
            b = (i / 10) % 10;
            c = i % 10;
            if (i == a *a*a + b *b*b + c *c*c) {
                if(flag==0){
                    printf("%d",i);
                }
                else{
                printf(" %d", i);
                }
                flag = 1;
            }
        }
        if (flag != 1)
            printf("no");
        printf("\n");
    }
}
发表于 2018-04-24 17:40:05 回复(0)
#include<iostream>
using namespace std;
int main()
{
    int m,n;
    while(cin>>m>>n){
        int sum=0;
        for(int i=m;i<=n;i++){
            int a=i/100,b=i/10%10,c=i%10;
            if(a*a*a+b*b*b+c*c*c == i){
                if(sum)cout<<" ";cout<<i;sum++;
            }
        }
        if(!sum)cout<<"no";
        cout<<endl;
    }
    return 0;
}
不想用数学函数.....

发表于 2018-04-18 18:38:30 回复(0)

m,n=input().split() n=int(n) m=int(m) M=[] for i in range(m,n):     a=i//100     b=i%100     c=b//10     d=b%10     if i==a**3+c**3+d**3:         M.append(i) if M==[]:     print('no') else:     for i in M[:-1]:         print(i,end=' ')     print(M[-1])

 


编辑于 2018-04-25 19:08:42 回复(3)
#include<iostream>
#include<vector>
#include<math.h>
using namespace std;
int main()
{
	int m=0,n=0;
	while(cin>>m>>n)
	{
		vector<int> ivec;
		for(int i=m;i<=n;i++)
		{
			int a=i/100;  //百位数;
			int b=((i%100)/10);  //十位数;
			int c=i-a*100-b*10;
			if(pow(a,3)+pow(b,3)+pow(c,3)==i)
				ivec.push_back(i);
		}
		if(ivec.size()==0)
			cout<<"no";
		else
		{
			for(int i=0;i<ivec.size()-1;i++)
				cout<<ivec[i]<<" ";
			cout<<ivec[ivec.size()-1];
		}
	}
	return 0;
}

发表于 2017-06-29 20:57:10 回复(3)
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
int main(){
int m,n;int arr[100]={0};
while(scanf("%d%d",&m,&n) != EOF){
int i;int flag=0;int j=0;
for(i=m;i<n+1;i++){
int a=i;int sum=0;
while(a!=0){
sum+=pow(a%10,3);
a=a/10;
}
if (sum==i) {flag=1;arr[j]=i;j++;}
}        
        if (flag==0) printf("no");
        else {int b; 
            for(b=0;b<j-1;b++){
                printf("%d ",arr[b]);
            }
            printf("%d",arr[b]);
        }
        printf("\n");
}
return 0;

发表于 2017-09-11 12:29:42 回复(0)
#include<stdio.h>
#include<math.h>    // double pow(double x, double y) 返回x的y次方
int main(){
    int m , n , i , judge = 0 , one , ten , hun;
    while( scanf("%d %d",&m,&n) != EOF )
    {
        for( i = m ; i <= n ; i++)
        {
            one = i % 10;
            hun = i / 100;
            ten = ( i - hun * 100 ) / 10;
            if( pow(one,3) + pow(ten,3) + pow(hun,3) == i )
            {
                judge = 1;
                printf("%d ",i);
            }
            if( i == n )
            {
                if( judge == 0 ) printf("no");
                printf("\n");
            }
        }
        
    }
    return 0;
}

发表于 2022-06-15 11:23:10 回复(0)
#include <iostream>

int main() {
    int m, n, val, sum, tmp, flag;
    while (scanf("%d %d", &m, &n) != EOF) {
        flag = 1;
        for (int i = m; i <= n; ++i) {
            val = i; sum = 0;
            while (val) {
                tmp = val % 10;
                sum += (tmp * tmp * tmp);
                val /= 10;
            }
            if (sum == i) printf("%d ", i), flag = 0;
        }
        if (flag) printf("no");
        printf("\n");
    }
    return 0;
}

发表于 2022-03-30 19:52:26 回复(0)
#include<stdio.h>
#include<math.h>

int main()
{
    int m=0,n=0;
    int a=0,b=0,c=0,i=0,j=0;
    while(scanf("%d %d",&m,&n)!=-1)
    {
        j=0;//状态置0找不到
        for(i=m;i<=n;i++)
        {
            c=i%10;//获取个位数字
            b=i/10%10;//获取十位数字
            a=i/100%10;//获取百位数字
            if(i==pow(a,3)+pow(b,3)+pow(c,3))
            {
                printf("%d ",i);//打印输出找到的数字
                j=1;//状态置1找到了
            }
        }
        if(j==0)
            printf("no\n");
    }
    return 0;
}

发表于 2022-03-04 02:16:10 回复(0)
#include <stdio.h>
#include <math.h>
int main()
{
    int m,n,a,b,c,sum,x=0;
    while(scanf("%d %d\n",&m,&n)!=EOF)
    {
        if(m>=100&&n<=999&&m<=n)
        {
            for(m;m<=n;m++)
            {
                a=m%10;
                b=m/10%10;
                c=m/100;
                sum=pow(a,3)+pow(b,3)+pow(c,3);
                if(m==sum)
                {
                    printf("%d ",m);
                    x++;
                }
            }
            if(x==0)
            {
                printf("no\n");
            }
        }
        else
        {
            printf("False");
        }
    }
    return 0;
}

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

int main()
{
    int m, n;
    while (cin >> m >> n)
    {
        int cnt = 0;
        for (int i = m; i <= n; i ++ )
        {
            if(flower(i)) {
                cnt ++;
                cout << i << ' ';
            }
        }
        if (!cnt) cout << "no" << endl;
        else cout << endl;
    }

}

发表于 2022-02-26 14:21:38 回复(0)
var
 m,n,i,a,b,c,s:longint;
begin
 while not eof() do
  begin
   readln(m,n);
   s:=0;
   for i:=m to n do
    begin
     a:=i div 100;
     b:=i div 10 mod 10;
     c:=i mod 10;
     if a*a*a+b*b*b+c*c*c=i then begin
                                  inc(s);
                                  if s=1 then write(i)
                                         else write(' ',i);
                                 end;
    end;
   if s=0 then write('no');
   writeln;
  end;
end.
对了好像就我一个发了Pascal代码
编辑于 2019-01-24 13:50:51 回复(0)
def func(n):
    a = int(n / 100)
    b = int((n - a*100) / 10)
    c = n - a*100 - b*10
    return a,b,c

raw_input = input()
input_num = raw_input.split()
min_num = int(input_num[0])
max_num = int(input_num[1])
res = []
for i in range(min_num, max_num+1):
    a,b,c = func(i)
    temp = a**3 + b**3 + c**3
    if temp == i:
        res.append(str(i))
if len(res) == 0:
    print('no')
else:
    res = ' '.join(res)
    print(res)

编辑于 2018-06-20 19:43:42 回复(0)
x = input().split()
start = int(x[0])
end = int(x[1])
value = []
for i in range(start,end+1,1):
    baiwei = int(i/100)
    shiwei = int(i%100/10)
    gewei = int(i%10)
    if pow(baiwei,3)+pow(shiwei,3)+pow(gewei,3) == i:
        value.append(str(i))
if len(value) == 0:
    print('no')
else:
    print(' '.join(value))

发表于 2018-03-29 21:52:17 回复(0)
hh
发表于 2018-03-23 12:35:14 回复(0)
#include <stdlib.h>  
#include <stdio.h>  

#include <iostream>  
using namespace std;  

#include <string>  
#include <vector>  
void fun(int m,int n)
{
    int s1;
    int s2;
    int s3;
    int count=0;
    for(int i=m;i<=n;i++)
    {
        s1=i/100;
        s2=(i-s1*100)/10;
        s3=i%10;
        if(i==(s1*s1*s1+s3*s3*s3+s2*s2*s2))
        {
            if(count==0)
            {
                cout<<i;
            }
            else
            {
                cout<<" "<<i;
            }
            count++;
        }
    }
    if(count==0)
    {
        cout<<"no";
    }
    cout<<endl;
}
int main()  
{ 
    int m[1000], n[1000];
    int start;
    int end;
    int length=0;
    while(cin>>start>>end)  
    {  
        m[length]=start;
        n[length]=end;
        length++;
    }  

    for(int i=0;i<length;i++)
    {
        fun(m[i],n[i]);
    }
    return 0; 
}

发表于 2018-03-12 17:44:52 回复(0)
 用字符切片变数字快还是辗转求余求每一位的数字快??每次分解一个数总想着Python的切片


发表于 2018-02-08 00:30:28 回复(0)
#include <iostream>
#include <cmath>
using namespace std;

bool Fun(int n)
{     int a,b,c;     a = n/100;     b = (n/10)%10;     c = n%10;     if(n == pow(a,3)+pow(b,3)+pow(c,3))         return true;     else         return false;
}

int main()
{     int m,n;     while(cin>>m>>n)     {         int cnt = 0;         for(int i=m;i<=n;i++)         {             if(Fun(i))             {                 cnt++;                 if(cnt==1)                     cout<<i;                 else                     cout<<" "<<i;             }         }         if(cnt==0)             cout<<"no";         cout<<endl;     }     return 0;
}

发表于 2018-01-25 00:46:21 回复(0)