[ create a new paste ] login | about

Link: http://codepad.org/pPequL1Y    [ raw code | output | fork ]

hecomi - C++, pasted on Jul 17:
#include <iostream>
#include <vector>
#include <cmath>

using namespace std;

// 数列クラス
class Nums
{
protected:
	vector<int> Elems;
public:
	Nums(const unsigned int n) {
		Set(n);
	}
	void Set(const unsigned int n) {
		for (unsigned int i=Elems.size(); i<=n; i++) {
			Push(i);
		}	
	}
	virtual void Push(unsigned int i) {};
	int operator[](unsigned int k) {
		if (k >= Elems.size()) {
			Set(k);
		}
		return Elems[k];
	}
};

// Fibonacci数列
class ANums : public Nums
{
public:
	ANums() : Nums(10) {
		Elems.push_back(1);
		Elems.push_back(1);
	}
	void Push(unsigned int i) {
		Elems.push_back(Elems[i-1] + Elems[i-2]);
	}
};

// 数列b
class BNums : public Nums
{
private:
	ANums A;
public:
	BNums(unsigned int m) : Nums(10), A() {
		Elems.push_back(m-1);
	}
	void Push(unsigned int i) {
		Elems.push_back(static_cast<int>(ceil(static_cast<double>(Elems[i-1]) * A[i-1] / (A[i-1] + A[i]))));
	}
};

// 数列c
class CNums : public Nums
{
private:
	BNums B;
public:
	CNums(unsigned int m) : Nums(10), B(m) {
		Elems.push_back(m-1);
	}
	void Push(unsigned int i) {
		Elems.push_back(Elems[i-1] + ((i%2)?-1:1)*(B[i] - 1));		
	}
};

int main()
{
	const int num = 7110;

	// 数列cを定義
	CNums c(num);

	// 収束するまで計算
	int i;
	for (i=1; c[i] != c[i-1]; i++);

	// 書き出し
	int a = c[i], b = num, k = 0; 
	while (a > 0 && b > 0) {
		if (k%2) {
			cout << a << endl;
			a -= b;
		} else {
			cout << b << endl;
			b -= a;
		}
		k++;
	}
	return 0;
}


Output:
1
2
3
4
5
6
7
8
9
10
11
12
7110
4394
2716
1678
1038
640
398
242
156
86
70
16


Create a new paste based on this one


Comments: