如何将一个值与整个数组进行比较

How to compare one value to a whole array?

本文关键字:数组 比较 一个      更新时间:2023-10-16
#include <iostream>
using namespace std;
int main () {
int n;
cin >> n;
int arr[n];
arr[0] = arr[1] = 1;
for (int i = 2; i < n; i++){
    arr[i] = arr[i-1] + arr[i-2];
}
for (int i = 1; i <= n; i++){
   if (i==arr[i])
    cout <<"F";
   else
    cout <<"f";
}
return 0;
} 

该程序必须采用(整数(,然后打印一个由大写和小写字母"F","f"组成的名称。名称中的字母从 1 到 n 编号,从 1 到 n,它将搜索第 i 个数字是否在斐波那契数列中,它将打印"F",否则它将打印"f"。
I.E输入:8预期输出:FFFfF(从1到n(我的输出:FFFfffff
我试图这样做,但我被困在第 5 次循环迭代中。

我很快就编码了,但它可以完成这项工作。您应该尝试正确格式化代码(空格和注释(作为开始。如果您正在接受用户输入,那么您需要非常小心,以确保它们提供您所期望的内容。在上面的代码中,我可以传入负数、字符串或任何我选择的内容,其余代码将执行!

您的代码还需要开始循环i = 0因为斐波那契数列也是为此值定义的。

#include <iostream>
#include <sstream>
//Returns integer from user input
int user_input(void);
//Returns the 'nth' fibonacci number
int fib(int);
int main () {
    int n = user_input();
    char fib_arr[n];
    std::fill_n(fib_arr, n, 'f');
    int ith_fib = 0;
    //loop until either the 'ith' fib number exceeds our array size or i exceeds
    //array size.
    for (int i = 0; i < n && ith_fib < n; i++)
    {
        ith_fib = fib(i);
        fib_arr[ith_fib] = 'F';
    }
    fib_arr[n] = '';
    std::cout << fib_arr << std::endl;
    return 0;
} 
//Returns integer from user input
int user_input() 
{
    int int_input = 0;
    std::string str_input = "";
    bool is_valid_int = false;
    while(!is_valid_int) 
    {
        std::cout << "Enter a positive number." << std::endl;
        //copy user input into str_input
        getline(std::cin, str_input);
        //convert str_inpt into a string stream object
        std::stringstream input_stream(str_input);
        //test to see if input_stream is of integer type and even and greater than 2.
        if(input_stream >> int_input)
        {
            is_valid_int = true;
        }
    }
    std::cout << "you entered " << int_input << std::endl;
    return int_input;
}
//Returns the 'nth' fibonacci number
int fib(int n)
{
    if(n == 0)
    {
        return 0;
    }
    else if(n ==1)
    {
        return 1;
    } 
    else
    {
        return (fib(n-1) + fib(n-2));   
    }
}

如注释中所述,您的条件是错误的:

void fibo(int n) {
    std::vector<int> arr(n); // Vector instead of VLA.
    arr[0] = arr[1] = 1;
    for (int i = 2; i < n; i++){
        arr[i] = arr[i-1] + arr[i-2];
    }
    for (int i = 1; i <= n; i++){
        if (std::find(arr.begin(), arr.end(), i) != arr.end()) { // Does arr contains i
            std::cout << "F";
        } else {
            std::cout << "f";
        }
    }
}

您甚至可以摆脱数组,因为斐波那契正在增加序列:

void fibo(int n) {
    int a = 1;
    int b = 1;
    for (int i = 1; i <= n; i++){
        if (i == b)
        {
            int c = a + b;
            a = b;
            b = c;
            std::cout <<"F";
        } else {
            std::cout <<"f";
        }
    }
}

演示