甜羊羊. 2024-04-13 13:36 采纳率: 45.5%
浏览 16
已结题

Fibonacci数列整除问题

问题描述
  已知四个数:a,b,c,d,判断在第s个Fibonacci数到第t个Fibonacci数之间哪些数既不是a也不是b也不是c也不是d的倍数。
输入格式
  第一行两个数,s,t,表示要判断第s个Fibonacci数到第t个Fibonacci数之间(包含第s个和第t个)的Fibonacci数。
  第二行四个数,a,b,c,d,意义如题目描述。
输出格式
  一行若干个数,A1,A2,A3...An,从小到大排列,表示第Ai个Fibonacci数既不是a也不是b也不是c也不是d的倍数。
  每两个数之间用空格隔开。
样例输入   
1 5
2 3 5 7
样例输出   
1 2
数据规模和约定
  1<=s<=t<=10000, 1<=a,b,c,d<=10000


#include <iostream>
#include <vector>

int fibonacci(int n) {
    if (n <= 2) {
        return 1;
    }
    int a = 1, b = 1, c;
    for (int i = 3; i <= n; ++i) {
        c = a + b;
        a = b;
        b = c;
    }
    return c;
}

bool isMultiple(int num, int a, int b, int c, int d) {
    return (num % a != 0) && (num % b != 0) && (num % c != 0) && (num % d != 0);
}

int main() {
    int s, t, a, b, c, d;
    std::cin >> s >> t >> a >> b >> c >> d;

    std::vector<int> result;
    for (int i = s; i <= t; ++i) {
        int fibNum = fibonacci(i);
        if (isMultiple(fibNum, a, b, c, d)) {
            result.push_back(fibNum);
        }
    }

    for (int i = 0; i < result.size(); ++i) {
        std::cout << result[i];
        if (i != result.size() - 1) {
            std::cout << " ";
        }
    }
    std::cout << std::endl;

    return 0;
}
我为啥错了
  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-13 13:36
    关注

    引自免费微信小程序:皆我百晓生

    您的代码基本上是正确的,但是在输出结果时,缺少了换行符。为了修复这个问题,请在循环结束后添加一个换行符。以下是修改后的代码:

    #include <iostream>
    #include <vector>
    
    int fibonacci(int n) {
        if (n <= 2) {
            return 1;
        }
        int a = 1, b = 1, c;
        for (int i = 3; i <= n; ++i) {
            c = a + b;
            a = b;
            b = c;
        }
        return c;
    }
    
    bool isMultiple(int num, int a, int b, int c, int d) {
        return (num % a != 0) && (num % b != 0) && (num % c != 0) && (num % d != 0);
    }
    
    int main() {
        int s, t, a, b, c, d;
        std::cin >> s >> t >> a >> b >> c >> d;
    
        std::vector<int> result;
        for (int i = s; i <= t; ++i) {
            int fibNum = fibonacci(i);
            if (isMultiple(fibNum, a, b, c, d)) {
                result.push_back(fibNum);
            }
        }
    
        for (int i = 0; i < result.size(); ++i) {
            std::cout << result[i];
            if (i != result.size() - 1) {
                std::cout << " ";
            }
        }
        std::cout << std::endl; // 添加了换行符
    
        return 0;
    }
    

    现在,这个程序应该可以正确地处理输入并输出满足条件的Fibonacci数,每个数之间用空格分隔,并且在最后一个数后面加上换行符。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月2日
  • 创建了问题 4月13日

悬赏问题

  • ¥15 verilog 非阻塞赋值下的移位拼接错误
  • ¥100 两个按钮控制一个LED
  • ¥15 用C语言写离散数学相关问题
  • ¥30 如何用python的GephiStreamer连接到gephi中,把Python和Gephi的具体操作过程都展示,重点回答Gephi软件的调试,以及如果代码的端口在浏览器中无法显示怎么处理
  • ¥15 ansys机翼建模肋参数
  • ¥15 Sumo软件无法运行
  • ¥15 如何在vscode里搭建stata的编辑环境?
  • ¥15 dify知识库创建问题
  • ¥15 如何用C#的chart画1000万个点不卡顿
  • ¥15 爬虫技术找到网上看过房源客户的电话