毎日1題


タイトル記述Fibonacci数列は、F[0]=0 F[1]=1 for each i≧2:F[i]=F[i-1]+F[i-2]と定義されているので、Fibonacci数列は、0,1,1,2,3,5,8,13,...、Fibonacci数列における数をFibonacci数と呼ぶ.あなたに1つのNをあげて、あなたはそれを1つのFibonacci数に変えたいと思って、すべてのステップはあなたは現在の数字のXをX-1あるいはX+1に変えることができて、今あなたに1つの数のNを求めて最低でどれだけのステップを必要としてFibonacci数に変えることができます.入力説明:正の整数N(1≦N≦1000000)として入力出力説明:最小ステップ数を出力してFibonacci数になる「例1入力15出力2」
#include
using namespace std;
int main() {
	int N;
	cin >> N;
	int Fi = 0;
	int Fj = 1;
	int s, l;
	int L = 0;
	while (1) {
		s = Fi + Fj;
		Fi = Fj;
		Fj = s;
		if (s < N) {
			L = N - s;
		}
		else {
			l = s - N;
			break;
		}
	}
	if (L > l) {
		cout << l << endl;
	}
	else {
		cout << L << endl;
	}
	return 0;
}

文字列の場合は、アルゴリズムを設計して、合法的なカッコ列であるかどうかを判断します.
文字列Aとその長さnを指定すると、bool値が合法的なカッコ列であるかどうかを表します.
テストサンプル:“()()”,6はtrueテストサンプル:“()a()()”,7はfalseテストサンプル:“()()()”,7はfalse
class Parenthesis {
public:
	bool chkParenthesis(string A, int n) {
		int flag = 0;
		for(int i = 0; i < n; ++i) {
			if (A[i] == '(') {
			++flag;
		}
		else if (A[i] == ')') {
			--flag;
		}
		else {
			return false;
		}
	}
	return flag == 0;
	}
};