赞
踩
春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:
“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=13+53+33。
现在要求输出所有在m和n范围内的水仙花数。
Time limit | Memory limit | OS | Source |
---|---|---|---|
1000 ms | 32768 kB | Windows | C语言程序设计练习(二) |
输入数据有多组,每组占一行,包括两个整数m和n(100<=m<=n<=999)。
对于每个测试实例,要求输出所有在给定范围内的水仙花数,就是说,输出的水仙花数必须大于等于m,并且小于等于n,如果有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开;
如果给定的范围内不存在水仙花数,则输出no;
每个测试实例的输出占一行。
Input | Output |
---|---|
100 120 | no |
300 380 | 370 371 |
找出输入两个数之间(包括两个数)的水仙花数,如果没有找到就输出“no”,如果找到了就按从大到小输出“水仙花数”,并且在用空格隔开。
1.对于一个数是否为水仙花数,可以用函数判断,再根据返回的值决定下一步的操作,因为题中m<=n,在判断的时候用for循环时,本身就是从大到小判断的,依次输出也是从大到小的,所以关心好,之间的空格就好了。
先把AC代码贴上来
#include<iostream> #include<math.h> using namespace std; int SXH(int x) { int B = x / 100, S = (x - B * 100) / 10, G = x % 10; if(x==pow(G,3)+pow(S,3)+pow(B,3)) return 1; else return -1; } int main() { int m, n; int a[4]; int i = 0; while (cin >> m,cin >> n) { for (m; m <= n; m++) { if (SXH(m) == 1) { a[i] = m; i++; } } for (int j = 0; j < i; j++) { cout << a[j]; if (j < i - 1)cout << ' '; } if(i>0)cout << endl; if (i == 0) { cout << "no" << endl; } i = 0; } }
int SXH(int x)
{
int B = x / 100, S = (x - B * 100) / 10, G = x % 10;
if(x==pow(G,3)+pow(S,3)+pow(B,3))
return 1;
else return -1;
}
首先写一个函数,用于判断一个数是否是水仙花数,结果会有两种返回值,1和-1。如果返回值是1,那么,好,这个数是水仙花数,如果是-1那么ok这个数不是。
int m, n;
int a[4];
int i = 0;
定义两个整型变量就是我们要输入的m,n;
定义数组a[4],其实是耍了个小聪明,因为三位数的水仙花数只有四个;
定义了一个整型变量 i ,相当于一个计数器,用于判断是否以及有多少水仙花数在这个区间内,同时用于准确控制空格的插入,同时控制输出次数;
for (m; m <= n; m++)
{
if (SXH(m) == 1)
{
a[i] = m;
i++;
}
}
利用水仙花函数判断循环时的数是否为水仙花数,如果是水仙花数,则将这个数赋值给数组a。
for (int j = 0; j < i; j++)
{
cout << a[j];
if (j < i - 1)cout << ' ';
}
接下来就是输出找到的数了,如果i=0就会跳过;
if (j < i - 1)cout << ' ';
这一段是控制了空格的输入
if(i>0)cout << endl;
if (i == 0)
{
cout << "no" << endl;
}
如果没有找到水仙花数(此时i=0)那么就输出“no”
i=0;
这种计数类的变量的记得复原。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。