大佬,小学生一枚,请教问题

MAX1226 2024-02-05 11:53:34

题目描述:
编程实现:四叶玫瑰数

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

给定两个正整数N和M,请将N~M(1≤N≤M≤1000000)之间(含N和M)的四叶玫瑰数按从小到大的顺序输出。

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

输入描述

第一行输入两个正整数N、M(1≤N≤M≤1000000)

输出描述

输出一行,包含若干个用一个空格隔开的正整数,表示N~M之间的四叶玫瑰数按从小到大的顺序的输出结果

注意:题目数据保证给定的N~M范围内至少有一个四叶玫瑰数
我是这样编的,总是出错,哪里错了!


#include<bits/stdc++.h>
using namespace std;


int main(){
int n,m,i[3];
cin>>n>>m;
for(int a=n;a>m;a++)
{
i={n/1000,(n/100)-(i[0]*10),(n/10)-(i[1]*10+i[2]*100),n%10}
if(pow (i[0],4)+pow (i[1],4)+pow (i[2],4)+pow (i[3],4)=i)
{
cout<<i<<endl;
}

}
getchar();return 0;
}

...全文
312 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复 2

你的代码存在一些问题,其中的错误如下:

  1. 在for循环中的条件 (a > m) 应该是 (a <= m),因为题目要求输出N~M范围内的四叶玫瑰数。

  2. 在计算i数组的值时,赋值语句 i = {...} 是错误的写法。应该使用循环将数字分解并赋值给i数组。

  3. 在判断是否为四叶玫瑰数时,等号应该是比较相等的 ==,而不是赋值的 =

  4. 在输出结果时,应该输出i数组中的数字,而不是输出i本身。

修正后的代码如下:

#include<bits/stdc++.h>
using namespace std;

int main() {
    int n, m;
    cin >> n >> m;
    for(int a = n; a <= m; a++) {
        int i[4] = {a/1000, (a/100)%10, (a/10)%10, a%10};
        if(pow(i[0], 4) + pow(i[1], 4) + pow(i[2], 4) + pow(i[3], 4) == a) {
            cout << a << " ";
        }
    }
    cout << endl;
    return 0;
}

注意:题目要求按从小到大的顺序输出四叶玫瑰数,所以需要将符合条件的四叶玫瑰数依次输出,而不是只输出一次。因此,在输出结果时需要将输出语句放在循环内部。另外,输出结果之间需要用空格隔开,最后再输出一个换行符。

MAX1226 02-05
  • 举报
回复
@PingdiGuo_guo 感谢指导
  • 举报
回复
@MAX1226 不客气

64,311

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧