列表

详情


OR67. 水仙花数

描述

春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的: “水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如: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

原站题解

C++ 解法, 执行用时: 1ms, 内存消耗: 220KB, 提交时间: 2017-07-02

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
	int a,b;
	while(~scanf("%d %d",&a,&b))
    {

        int i=0;
        i=a;
        int flag=0;
        while(i++<=b)
        {
            if(pow(i/100,3)+pow((i%100)/10,3)+pow(i%10,3)==i)
            {
                flag++;
                if (flag ==1)
                    printf("%d",i);
                else if(flag>1)
                    printf(" %d",i);
            }
        }

        if(flag==0)
            printf("no\n");
        else
            printf("\n");


    }
	return 0;
}

Pascal 解法, 执行用时: 1ms, 内存消耗: 256KB, 提交时间: 2018-10-07

var t,i,j,m,n,x,y,z,l:longint;
  a:array[1..999] of longint;
  begin
     for i:=100 to 999 do
       begin
       x:=i div 100;
       y:=i div 10 mod 10;
       z:=i mod 10;
       if x*x*x+y*y*y+z*z*z=i then
         begin
           inc(t);
           a[t]:=i;
             end;
       end;
  while not(eof) do
        begin
        l:=0;
          readln(m,n);
          for i:=1 to t do
          if (a[i]>=m) and (a[i]<=n) then
           if l=1 then write(' ',a[i])  else
           begin
            write(a[i]);
             l:=1;
           end;
           if l=0 then writeln('no') else writeln;
         end;
end.

上一题