pixiv

104北二1費氏數列

Judge

內容:

1.費氏數列 (104北二區 桃竹苗 )
問題描述
費氏數列(Fibonacci sequence)是以遞迴(Recursive)的方法來定義,如下:
F(0)=0 、 F(1)=1 、 F(n)=F(n-1)+F(n-2) for n>=2
用文字來說,費氏數列是由0和1開始,之後的就由之前的兩數相加。前面幾個費氏數為:0,1,1,2,3,5,13,21,34,55,89,144,233, ……
現在,你一個任務就是寫一個程式來輸出一範圍內的費氏數列以及其數量。

輸入說明:

第1列有一正整數t(<10000)表示有t組資料,接著t列,每組包含兩個正整數A,B (0<=A,B<=1000000),用空格字元做間隔,代表所求費氏級數的範圍。

輸出說明:

對於每組測試資料,請輸出所求範圍內(即A<=F(i)<=B 或 B<=F(i)<=A)的所有費氏數F(i)以及數量。若沒有任何符合範圍的費氏數,則輸出0。
兩組資料之間以一列 6 個減號( ------ ) 隔開,請注意:1有兩個 。
例如:第1組 55~220之間有三個費氏數55,89,144、而第2組90~140之間沒有、第3組0是第1個也算1個、第4組1~2之間為1,1,2共三個。

範例輸入:

6
55 200 
90 140
0 0
1 2
2 5
3 0

範例輸出:

55
89
144
3
------
0
------
0
1
------
1
1
2
3
------
2
3
5
3

------
0
1
1
2
3
5

先寫了個程式輸出範圍內費氏數列,降低複雜度(其實也沒差多少XD)

#include<iostream>
using namespace std;
int main(){
    int l,m=0,r=1;
    int a = 40;
    while(a--){
    	cout << m <<',';
    	l = m;
    	m = r;
    	r = l + m;    	
	}
}

#include<iostream>
#include<algorithm>
using namespace std;
int main(){
    int fib[] = {0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025,121393,196418,317811,514229,832040};
    int a,b;
    int count=0;
    int n;
    int t;
    cin >>t;
    while(t--){
    	count=0;
    	cin >> a >> b;    	
   		if(a>b)swap(a,b);
    	for(int i=0;i<31;i++){
    		if( fib[i]>=a && fib[i]<=b){
    			cout<<fib[i]<<'\n';
    			count ++;
			}
		}
		cout << count<<'\n';
		if(t)cout <<"------"<<'\n';
	}
    
}

104北二2.括號問題

Judge

內容:

2.括號問題 (104北二區 桃竹苗 )

問題描述

小明要解決一大堆的數字加減乘除運算,好在小明有一個好用的電腦程式,只要輸入問題,程式即輸出答案。例如小明輸入 3×((3+5)×4-(2×2)),程式輸出84。但是,這個程式只能用來計算「正確」的輸入,也就是式子中的括號必須成對而且先出現左括號再出現右括號。請你寫一個程式判斷一個式子中的括號是否正確,若正確的話,請輸出式子中有幾對括號,若錯誤的話,請輸出0。

輸入說明:

第1列有一正整數t(<1000)表示有t組資料,接著t列,代表一個式子。為了簡化問題,式子中的數字與加、減、乘、除等運算元皆已移除,只留下括號,中間沒有空白。每筆輸入的括號符號數最多20 個。

輸出說明:

根據每列資料,輸出式子中的括號是否正確(成對且先出現左括號再出現右括號)。若正確的話,請輸出式子中有幾對括號,若不正確請輸出0。

範例輸入:

2
(()()) 
((()()) 

範例輸出:

3
0

思路是過程中 "(" 永遠比 ")" 還多
,而且兩種括號數量要一樣多。

中間記得把字元陣列 reset 卻忘記還有 l,r,flag 也要 reset

#include<iostream>
#include<cstring>
using namespace std;
char a[25]={'\0'};
void reset();
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int l=0,r=0;
    int t;
    bool flag = true;
    cin>>t;
    while(t--){
    	reset();
    	l=0,r=0;
    	flag = true;
    	cin>>a;
		int len = strlen(a);
    	for(int i=0;i<len;i++){
   		 if (a[i]=='(')l++;
    		if (a[i]==')')r++;
    		if(r>l){
    			flag = false;
				break;
			}
		}
		if(r!=l)flag = false;
		if(flag)cout<<l<<'\n';
		else cout<<flag<<'\n';
	}

}

void reset(){
	for(int i=0;i<20;i++){
		a[i] = '\0';
	}
}

pixiv