作者简介:大家好,我是大杉。
个人主页:爱编程的大杉
支持我:点赞+收藏~不迷路
✔系列专栏:c语言入门每日一题
(❁´◡`❁)每日格言:“爱也是一种试探,看我们能付出多少不求回报,看我们能坚持多久不问结果。–陶立夏《练习一个人》
题目叙述:一个三位整数(100~999),若各位数的立方和等于该数自身,则称其为“水仙花数”(如:153=13+53+33),找出所有的这种数。
推广求四位花朵数(10000~9999)即n=a4+b4+c4+d4
终极推广:若要求n位花朵数怎么进行程序设计(10n-1~10n-1-1)?编写程序,对输入的N(N<=9),求出所有的N位花朵数。
普适思路:对于确定花朵数目的水仙花数,思路很简单,直接将各位数字表示出来,然后运用穷举法,根据条件打印。
求解n位花朵数思路:为求解N位的花朵数,需要对N位数x(x为10N-1~10N-1之间的整数)进行穷举。对每个枚举的x,求出其每个位上的数字的N次方的和sum,若满足sum==x,则x是N位花朵数。
为求解N位花朵数,可以抽象两个函数。一个是int power(int x,int n),用于求x的n次方;另一个是int sum(int x,int n),用于求x的各位数的n次方之和。
#include
using namespace std;
int main()
{
int daff;
for (daff = 100; daff < 1000; daff++)
{
//表示出各个位数
int a = daff / 100;
int b = daff % 100 / 10;
int c = daff % 10;
if (a * a * a + b * b * b + c * c * c == daff)
{
cout << daff << " " << endl;
}
}
return 0;
}
代码如下(示例):
#include
using namespace std;
int main()
{
int daff;
for (daff = 1000; daff <=9999; daff++)
{
int a = daff / 1000;
int b = daff % 1000 / 100;
int c = daff % 100 / 10;
int d=daff%10;
if (a * a * a*a + b * b * b*b + c * c * c*c +d*d*d*d== daff)
{
cout << daff << " " << endl;
}
}
return 0;
}
#include
#include //引入clock函数的特定头文件
using namespace std;
int power(int x, int n)
{
int i, p = 1;
for (i = 1; i <= n; i++)
p *= x;
return p;
}
int digitsum(int x, int n)
{
int s = 0;
while (x != 0)
{
s += power(x % 10, n);
x = x / 10;
//将每一个数表示出来,传到power(),分别求他们的n次方
}
return s;
}
int main()
{
int n, x, a, b; //a、b分别为相应穷举区间的上下界限
cin >> n;
a = power(10, n - 1);
b = power(10, n) - 1;
//表示出数据范围
int start = clock();//记录时间函数
for (x = a; x <= b; x++)
{
if (digitsum(x, n) == x)
cout << x << " ";
}
cout << endl << "Running Time :" << clock() - start << " ms." << endl;
return 0;
}
图片中的运行结果显示出来了cpu运行时间,那么接下来就来讲一讲检测时间的函数
clock()函数
msdn中的解释:Calculates the processor time used by the calling process.
c++中的运用所需头文件:#include ctime (加上尖括号),c中所需用的头文件#include
输出格式:cout << endl << “Running Time :” << clock() - start << " ms." << endl;(注意clock函数的定义int start=clock())
int start()=clock();
根据情况选择定义的位置
对于算法题,我们要善于打开自己的思路,不断探索新的方法,哪有人问了:为什么你能想到这么多思路,其实秘密就在我最近发现的宝藏网站,牛客网,这个网站不仅有 c ,java,phyon,c++等由浅入深的语法知识,还能在线Oj培养面试笔试能力。更让我爱了是他的讨论区,真是大佬云集,给我增添了很多思路,对我产生了很大启发, 这里分享一个牛客c语言提单:牛客c语言题单大家一起练起来吧!