第十四届蓝桥杯省赛C++编程题解;四叶玫瑰数

2023-05-18 09:10:34    动态资讯   

四叶玫瑰数是指一个四位数,其各位上的数字的四次方之和等于本身。

 

给定两个正整数NM

请将N~M1NM1000000)之间(含NM)的四叶玫瑰数按从小到大的顺序输出。

 

例如:N=1234M=2345时,有一个四叶玫瑰数1634,因为1^4 + 6^4 + 3^4 + 4^4 = 1634,故输出1634

 

【输入描述】

第一行输入两个正整数NM1NM1000000

【输出描述】

输出一行,包含若干个用一个空格隔开的正整数,表示N~M之间的四叶玫瑰数按从小到大的顺序的输出结果(注意:题目数据保证给定的N~M范围内至少有一个四叶玫瑰数)

 

【样例输入】

1234 2345

【样例输出】

1634

 

分析:

考察枚举算法。

题目数据前后矛盾,题干描述的是四位数,后面的取值范围却是1~1,000,000

实际上四叶玫瑰数本身是指针对四位数而言的,但本题有一个特例:数字1

最终枚举范围为[n,min(m,10,000)]

#include<iostream>
using namespace std;
int calc(int x)
{
  return x*x*x*x;
}
int n,m,sum;
 
int main()
{
  cin>>n>>m;
  for(int i=n,t=n;i<=m;i++)
  {
    sum=0;
    t=i;
    while(t>0)
    {
      sum+=calc(t%10);
      t/=10;
    }
    if(sum==i)
      printf("%d\n",sum);
  }  
  return 0;
}