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

👀作者简介:大家好,我是大杉。
🚩🚩 个人主页:爱编程的大杉
支持我:点赞+收藏~不迷路🧡🧡🧡
✔系列专栏: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 <iostream>
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 <iostream>
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 <iostream>

#include <ctime>//引入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运行时间,那么接下来就来讲一讲检测时间的函数🎗🎗🎗


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

clock()函数

msdn中的解释:Calculates the processor time used by the calling process.
c++中的运用所需头文件:#include ctime (加上尖括号),c中所需用的头文件#include<stdio.h>
输出格式:cout << endl << “Running Time :” << clock() - start << " ms." << endl;(注意clock函数的定义int start=clock())

int start()=clock();
根据情况选择定义的位置

正确定义:在这里插入图片描述

错误定义:定义在循环内,但打印循环语句在整个循环之外
在这里插入图片描述

五.来自大杉的疯狂安利

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

在这里插入图片描述

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@Starry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值