【day2c/c++入门题目-这样的水仙花数你见过吗?】

作者简介:大家好,我是大杉。
个人主页:爱编程的大杉
支持我:点赞+收藏~不迷路
✔系列专栏:c语言入门每日一题
(❁´◡`❁)每日格言:“爱也是一种试探,看我们能付出多少不求回报,看我们能坚持多久不问结果。–陶立夏《练习一个人》

【day2c/c++入门题目-这样的水仙花数你见过吗?】_第1张图片

题目叙述:一个三位整数(100~999),若各位数的立方和等于该数自身,则称其为“水仙花数”(如:153=13+53+33),找出所有的这种数。
推广求四位花朵数(10000~9999)即n=a4+b4+c4+d4
终极推广:若要求n位花朵数怎么进行程序设计(10n-1~10n-1-1)?编写程序,对输入的N(N<=9),求出所有的N位花朵数。

文章目录

  • 基本思路
  • 一、求三位花朵数(简单)
  • 二、求四位花朵数(方法同上)
  • 三.求n位花朵数
  • 四. c++中显示运行时间的函数clock()
    • 五.来自大杉的疯狂安利


基本思路

普适思路:对于确定花朵数目的水仙花数,思路很简单,直接将各位数字表示出来,然后运用穷举法,根据条件打印。

求解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;
}

三.求n位花朵数

#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;

}

【day2c/c++入门题目-这样的水仙花数你见过吗?】_第2张图片

图片中的运行结果显示出来了cpu运行时间,那么接下来就来讲一讲检测时间的函数


四. c++中显示运行时间的函数clock()

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();
根据情况选择定义的位置

正确定义:【day2c/c++入门题目-这样的水仙花数你见过吗?】_第3张图片

错误定义:定义在循环内,但打印循环语句在整个循环之外
【day2c/c++入门题目-这样的水仙花数你见过吗?】_第4张图片

五.来自大杉的疯狂安利

对于算法题,我们要善于打开自己的思路,不断探索新的方法,哪有人问了:为什么你能想到这么多思路,其实秘密就在我最近发现的宝藏网站,牛客网,这个网站不仅有 c ,java,phyon,c++等由浅入深的语法知识,还能在线Oj培养面试笔试能力。更让我爱了是他的讨论区,真是大佬云集,给我增添了很多思路,对我产生了很大启发, 这里分享一个牛客c语言提单:牛客c语言题单大家一起练起来吧!

【day2c/c++入门题目-这样的水仙花数你见过吗?】_第5张图片

你可能感兴趣的:(c/c++入门之每日一题,c语言,c++)