如何将一个值与整个数组进行比较
How to compare one value to a whole array?
#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";
}
}
}
演示
相关文章:
- 比较字符数组
- 如何在C++中比较两个char数组
- 比较if语句中的数组值和int值
- 在这里,当我们比较 if(vc[i]==vc1[i]) 时,它是向量数组. 实际上比较的值是多少,
- 比较 c++ 中的字符数组
- 如何将字符串字符与结构数组进行比较?
- 将constexpr字节数组与缓冲区的一部分(指向数据的指针)进行比较
- 在C++中返回基元类型数组(Java比较)
- 谷歌测试比较指针数组的内容
- 比较嵌套 for 循环中的两个 wchar 数组?
- C++ 将二维数组索引与条件语句中的函数值进行比较
- 在 c++ 中比较不相等数组或字符串的方法
- 将子字符串与字符串数组进行比较的 IF 条件会在C++中产生错误
- 如何使用 for 循环来比较不同大小的数组
- 如何为映射和priority_queue编写比较器,其中元素是二维数组
- 比较/搜索数组中多个整数的最佳解决方案
- 从数组比较2个字符串时,程序崩溃
- C++ 更快的字符数组比较
- c++数组比较和移动?为什么苹果不动?
- 快速数组比较和替换最接近值的元素的算法.(跟踪点)