Есть такой код: https://pastebin.com/ZGMiwt34
Записать значения чисел фиббоначи в переменные и вернуть одновременно три значения переменных.
C/C++
Записать значения чисел фиббоначи в переменные и вернутт одновременно три значения переменных.
#include <iostream>
using namespace std;
class int3x
{
public:
int a{}, b{}, c{};
friend ostream& operator << (ostream& out, const int3x& i);
};
ostream& operator << (ostream& out, const int3x& i)
{
out << "\t" << i.a << "\t" << i.b << "\t" << i.c;
return out;
};
int fib (int n)
{
switch (n)
{
case 0:
return 1;
case 1:
return 1;
default:
return fib(n - 2) + fib(n - 1);
}
}
int3x fibs(int n)
{
int3x ret;
ret.a = fib(n - 1);
ret.b = fib(n);
ret.c = fib(n + 1);
return ret;
}
int main()
{
int i;
cin >> i;
cout << "fibs(" << i << " - 1), ("<< i << "), ("<<i <<" + 1) = " << fibs(i);
}
using namespace std;
class int3x
{
public:
int a{}, b{}, c{};
friend ostream& operator << (ostream& out, const int3x& i);
};
ostream& operator << (ostream& out, const int3x& i)
{
out << "\t" << i.a << "\t" << i.b << "\t" << i.c;
return out;
};
int fib (int n)
{
switch (n)
{
case 0:
return 1;
case 1:
return 1;
default:
return fib(n - 2) + fib(n - 1);
}
}
int3x fibs(int n)
{
int3x ret;
ret.a = fib(n - 1);
ret.b = fib(n);
ret.c = fib(n + 1);
return ret;
}
int main()
{
int i;
cin >> i;
cout << "fibs(" << i << " - 1), ("<< i << "), ("<<i <<" + 1) = " << fibs(i);
}
// C++ == ООП
#include <iostream>
using namespace std;
class Fibonacci {
public:
struct Triple { unsigned long long a, b, c; };
Fibonacci() { fib(1000); }
Triple triple(unsigned n) { return { a[n - 2], a[n - 1], a[n] }; }
private:
static const auto m = 1000U;
inline static unsigned long long a[m]{ 0, 1 };
static void fib(unsigned n) { for (auto i = 2U; i < m; ++i) a[i] = a[i - 2] + a[i - 1]; }
};
int main() {
unsigned n;
cin >> n;
if (n <= 1U) puts("Error!");
else {
Fibonacci fib;
auto[a, b, c] = fib.triple(n);
cout << a << ' ' << b << ' ' << c << '\n';
}
}
#include <iostream>
using namespace std;
class Fibonacci {
public:
struct Triple { unsigned long long a, b, c; };
Fibonacci() { fib(1000); }
Triple triple(unsigned n) { return { a[n - 2], a[n - 1], a[n] }; }
private:
static const auto m = 1000U;
inline static unsigned long long a[m]{ 0, 1 };
static void fib(unsigned n) { for (auto i = 2U; i < m; ++i) a[i] = a[i - 2] + a[i - 1]; }
};
int main() {
unsigned n;
cin >> n;
if (n <= 1U) puts("Error!");
else {
Fibonacci fib;
auto[a, b, c] = fib.triple(n);
cout << a << ' ' << b << ' ' << c << '\n';
}
}
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
long fib(int n){const double f=log((1+sqrt(5))/2), PI=4*atan(1);
return long(round(1/sqrt(5)*(exp(f*n)-cos(PI*n)/exp(f*n))));}
vector <long> fib3(int n){vector <long> v(3); for(int i=-1;i<=1;i++)v[i+1]=fib(i+n); return v;}
int main(){int n; cout<<"n: "; cin>>n; vector <long> v=fib3(n); for(int i:v)cout<<i<<endl;}
или без векторов
#include <iostream>
#include <cmath>
using namespace std;
long fib(int n){const double f=log((1+sqrt(5))/2), PI=4*atan(1);
return long(round(1/sqrt(5)*(exp(f*n)-cos(PI*n)/exp(f*n))));}
void fib3(int n, long &a,long &b,long &c){a=fib(n-1); b=fib(n); c=fib(n+1);}
int main(){int n; cout<<"n: "; cin>>n; long a,b,c; fib3(n,a,b,c);
cout<<a<<'\n'<<b<<'\n'<<c<<'\n';}
#include <cmath>
#include <vector>
using namespace std;
long fib(int n){const double f=log((1+sqrt(5))/2), PI=4*atan(1);
return long(round(1/sqrt(5)*(exp(f*n)-cos(PI*n)/exp(f*n))));}
vector <long> fib3(int n){vector <long> v(3); for(int i=-1;i<=1;i++)v[i+1]=fib(i+n); return v;}
int main(){int n; cout<<"n: "; cin>>n; vector <long> v=fib3(n); for(int i:v)cout<<i<<endl;}
или без векторов
#include <iostream>
#include <cmath>
using namespace std;
long fib(int n){const double f=log((1+sqrt(5))/2), PI=4*atan(1);
return long(round(1/sqrt(5)*(exp(f*n)-cos(PI*n)/exp(f*n))));}
void fib3(int n, long &a,long &b,long &c){a=fib(n-1); b=fib(n); c=fib(n+1);}
int main(){int n; cout<<"n: "; cin>>n; long a,b,c; fib3(n,a,b,c);
cout<<a<<'\n'<<b<<'\n'<<c<<'\n';}
// Если первый член последовательности (n = 1) будет 1
// Второй (n = 2) тоже 1
// А третий равен сумме первого и второго (n3 = n1 + n2)
#include <iostream>
using namespace std;
int fib(int n)
{
int A = 1,B = 1,C = 1;
for(int x = 3; x <= n; x++)
{
A = B;
B = C;
C = A + B;
}
return C;
}
int main()
{
int n;
do
{
cout << "n = ";
cin >> n;
}while(n<2);
int a,b,c;
a = fib(n-1);
b = fib(n);
c = fib(n+1);
cout << a << ' ' << b << ' ' << c << endl;
return 0;
}
// Второй (n = 2) тоже 1
// А третий равен сумме первого и второго (n3 = n1 + n2)
#include <iostream>
using namespace std;
int fib(int n)
{
int A = 1,B = 1,C = 1;
for(int x = 3; x <= n; x++)
{
A = B;
B = C;
C = A + B;
}
return C;
}
int main()
{
int n;
do
{
cout << "n = ";
cin >> n;
}while(n<2);
int a,b,c;
a = fib(n-1);
b = fib(n);
c = fib(n+1);
cout << a << ' ' << b << ' ' << c << endl;
return 0;
}
А у меня такая программа. Вводится натуральное число n, вычисляется массив чисел Фибоначчи от F[0]=0 (за которым следущим будет, естественно, F[1]=1) до F[n] включительно. И в конце выводятся три последних числа массива (если n не меньше двух, разумеется):
#include <gmp.h>
#include <iostream>
using namespace std;
int main()
{
unsigned long i, n;
string red = "\033[31m", green = "\033[32m",
blue = "\033[34m", magenta = "\033[35m",
podcherk = "\033[04m", zhirno = "\033[01m",
sbros = "\033[00m"; for (;;) { cout << sbros <<
podcherk << blue << "n: " << red; cin >> n;
mpz_t *f = new mpz_t [n + 1];
mpz_init_set_ui(f[0], 0);
mpz_init_set_ui(f[1], 1);
for (i = 2; i <= n; i++)
mpz_add(f[i], f[i - 1], f[i - 2]);
for (i = n - 2; i <= n; i++)
cout << sbros << zhirno << green << i << ") "
<< magenta << mpz_get_str(NULL, 10, f[i])
<< endl; cout << endl; delete [] f; }
}
Натуральные числа стандартными типами не ограничены, так что n можно брать равным хоть ста тысячам (просто тогда вывод достаточно большим окажется):

#include <gmp.h>
#include <iostream>
using namespace std;
int main()
{
unsigned long i, n;
string red = "\033[31m", green = "\033[32m",
blue = "\033[34m", magenta = "\033[35m",
podcherk = "\033[04m", zhirno = "\033[01m",
sbros = "\033[00m"; for (;;) { cout << sbros <<
podcherk << blue << "n: " << red; cin >> n;
mpz_t *f = new mpz_t [n + 1];
mpz_init_set_ui(f[0], 0);
mpz_init_set_ui(f[1], 1);
for (i = 2; i <= n; i++)
mpz_add(f[i], f[i - 1], f[i - 2]);
for (i = n - 2; i <= n; i++)
cout << sbros << zhirno << green << i << ") "
<< magenta << mpz_get_str(NULL, 10, f[i])
<< endl; cout << endl; delete [] f; }
}
Натуральные числа стандартными типами не ограничены, так что n можно брать равным хоть ста тысячам (просто тогда вывод достаточно большим окажется):

Похожие вопросы
- Для заданных с клавиатуры значений переменных x и n вычислить
- Лютый препод не унимается. Просит без ООП написать функцию обмена значениями переменных любого типа!
- Чему равно значение переменной, если ей присвоено значение, возвращенное функцией, которая ничего не возвращает? (+)
- Как объявить рандомное положительно и рандомное отрицательно значение переменным float double?
- Если в редакторе имя переменной это строковое значение то после компиляции при поиске переменная есть как адресс?
- При совершении арифметических операций с переданными в рекурсивную функцию переменными, переменные меняются(Си)
- Глобальная переменная. (Си)
- Как создать под-переменную в python?
- Где располагается нессылочная переменная в ссылочном объекте с++?
- Чем именно обрабатываются не регистровые переменные если регистровые обрабатываются регистрами?