HDUoj2010水仙花数C语言,C++版 - HDUoj 2010 3阶的水仙花数 - 牛客网

版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址

http://blog.csdn.net/lzuacm。

C++版 - HDUoj 2010 3阶的水仙花数 - 牛客网

时间限制:1秒 空间限制:32768K 热度指数:1005

题目描述

春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:

(三阶的)“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=13+53+33" role="presentation" style="position: relative;">153=13+53+33153=13+53+33。

现在要求输出所有在m和n范围内的(三阶的)水仙花数。

扩展:

(n阶)水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。

一个正整数abcd···被称为n阶的Armstrong数(水仙花数)当满足:

abcd⋯=an+bn+cn+dn+⋯" role="presentation" style="position: relative;">abcd⋯=an+bn+cn+dn+⋯abcd⋯=an+bn+cn+dn+⋯

(例如:3阶的水仙花数 33+73+03=370" role="presentation" style="position: relative;">33+73+03=37033+73+03=370,4阶的水仙花数 1634=14+64+34+44" role="presentation" style="position: relative;">1634=14+64+34+441634=14+64+34+44 等等)。

输入描述:

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

输出描述:

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

如果给定的范围内不存在水仙花数,则输出no;

每个测试实例的输出占一行。

示例1

输入

100 120

300 380

输出

no

370 371

示例2 (区间上限n恰好是一个水仙花数)

输入

2 407

150 370

输出

153 370 371 407

153 370

思路:

暴力法,暂无更优解法。看到有人用鸡贼的方法,直接枚举100~999之间的4个水仙花数,方法并不general,该方法对于n阶的水仙花数就无能为力了,不推荐~

相关数学解释:

已AC代码:

#include

using namespace std;

int GetSum(int n)

{

int sum = 0;

while (n != 0)

{

int lastDigit = n % 10;

sum += lastDigit * lastDigit*lastDigit;

n /= 10;

}

return sum;

}

int main() {

int m, n;

while (cin >> m >> n)

{

bool hasArmstrongNum = false; //水仙花数又叫Armstrong数,故用此变量名

int count = 0;

for (int i = m; i <= n; i++) // 注意: 循环控制条件需要=,否则wrong answer.

{

int sum = 0;

sum = GetSum(i);

if (sum == i)

{

hasArmstrongNum = true;

if (count != 0)

cout << " "; // 除了第一个水仙花数,其他水仙花数前面需要加空格

cout << i;

count++;

}

}

if (hasArmstrongNum)

cout << endl;

else

cout << "no" << endl;

}

return 0;

}

最初的版本:

#include

#include

using namespace std;

class Solution

{

public:

void PrintArmstrongNums(int m, int n)

{

vector vect;

int count = 0;

for (size_t i = m; i <= n; i++)

{

int sum = GetSum(i);

if (i == sum)

{

vect.push_back(i);

count++;

}

}

if (count > 0)

{

cout << vect[0];

for (size_t i = 1; i < count; i++)

cout << " " << vect[i];

cout << endl;

}

if (count == 0)

cout << "no" << endl;

}

int GetSum(int n)

{

int sum = 0;

while (n != 0)

{

int lastDigit = n % 10;

sum += lastDigit * lastDigit*lastDigit;

n /= 10;

}

return sum;

}

};

int main()

{

Solution sol;

int a, b;

while (cin >> a >> b)

{

sol.PrintArmstrongNums(a, b);

}

return 0;

}

ps: 关于高阶的水仙花数(Armstrong数),可参考下面Java实现的各类算法:

ArmstrongNumbers: Efficient Armstrong Number generation in Java

https://github.com/shamily/ArmstrongNumbers

打印出所有&amp&semi;quot&semi;水仙花数

时间限制: 1 Sec  内存限制: 128 MB 提交: 695  解决: 352 [提交][状态][讨论版] 题目描述 打印出所有"水仙花数",所谓"水仙花数&quo ...

【HDU 2010】水仙花数

http://acm.hdu.edu.cn/showproblem.php?pid=2010 春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:“水仙花数”是指一个三位 ...

hdu 2010 - 水仙花数

题意: 数学上有个水仙花数,他是这样定义的:"水仙花数"是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3.现在要求输出所有在m和n范围内的水仙花 ...

HDOJ 2010 水仙花数

Problem Description 春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的: "水仙花数"是指一个三位数,它的各位数字的立方和等于其本 ...

php 求水仙花数优化

水仙花数是指一个n位数(n>=3),它每一个位上数字的n次幂之和等于它本身,n为它的位数.(比如:1^3+5^3+3^3 = 153) 水仙花数又称阿姆斯特朗数. 三位的水仙花数有4个:153, ...

Python练习题 009:水仙花数

[Python练习题 009] 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个"水仙花数& ...

C语言 &&num;183&semi; 4-3水仙花数

问题描述 打印所有100至999之间的水仙花数.所谓水仙花数是指满足其各位数字立方和为该数字本身的整数,例如 153=1^3+5^3+3^3. 样例输入 一个满足题目要求的输入范例.例:无 样例输出 ...

Java程序设计之打印100~999的水仙花数

package printDaffodilNumber; /* * 题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身 ...

51Nod--1015 水仙花数

51Nod:  http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1015   1015 水仙花数 基准时间限制:1 秒 空间 ...

随机推荐

UWP 入门教程2——如何实现自适应用户界面

系列文章 UWP入门教程1——UWP的前世今生 如上文所说的,布局面板根据可用的屏幕空间,指定界面元素的大小和位置.例如StackPanel 会水平或垂直排列界面元素.Grid 布局与CSS 中的表格 ...

Linux下使用RecordMyDesktop进行屏幕录像

近期我们在评估给用户提供视频教程的可能性,以此来展示某些用视频才能更好表达的教程.在挖掘这个问题的时候,我们发现极丰富的可用于屏幕录像的工具.这些程序大体上特性的区别有:视频质量,性能,兼容性.这在此 ...

struts&period;custom&period;i18n&period;resources国际化

每种框价都会有国际化的支持,struts2的国际化大致上分为页面的国际化,Action的国际化以及xml的国际化 首先在struts.properties文件中加入以下内容:struts.custom ...

反转链表 --剑指offer

题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反正后链表的头结点. #include #include typedef str ...

&period;net code injection

.NET Internals and Code Injection http://www.ntcore.com/files/netint_injection.htm Windows Hooks in ...

Node&period;js脚本杀掉占用端口的进程

express默认端口为3000,由于实际需要改为3392,修改监听3392之后,没有成功,发现该端口被系统正占用,为了避免每次都手工停掉该系统调用,释放端口,故写了如下脚本. var cmd=pro ...

JavaWeb核心编程之&lpar;三&period;3&rpar;Servlet Init 配置

Servlet初始化 可以传入一些参数 通过 来配置 新建 servletinit项目 新建包 com.xiaoan.test->new Class(Test ...

JDK1&period;5后的新特性之一:可变参数

Java中的可变参数 Java1.5后出现了一个新特性,即可变参数,格式为:类型 …参数 例如: 总的来说,可变参数可以当成是数组来用: public void testSum() { System. ...

json 数组 对象 xml 之间转换(待补充)

json 数组  xml 对象   之间转换(待补充) 1 把对象的类型或者数组转换成字符串类型(或者更确切的说是json类型的). 此处参考链接http://www.jb51.net/article ...

percona-xtrabackup工具实现mysql5&period;6&period;34的主从同步复制

percona-xtrabackup工具实现mysql5.6.34的主从同步复制 下载并安装percona-xtrabackup工具 # wget https://www.percona.com/do ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值