---
# System prepended metadata

title: 迴圈練習的題解
tags: [題解]

---

# 迴圈練習的題解

---
# ForLoopPractice 1

- 想法 : 如果可以被2整除就代表他是偶數，否則為奇數。直接一個迴圈即可
- 題解 :
``` cpp=
#include<bits/stdc++.h>
#define ll long long
#define MXN 100005

using namespace std;
int main(){
    int n,x,ans=0;
    
    cin >>n;
    for(int i=1;i<=n;++i){
        cin >>x;
        if(i%2==1)ans+=x;
        else ans-=x;
    }
    cout<<ans<<'\n';
	
}
```

----

# ForLoopPractice 2
- 想法 : 因為題目有規定n為3的倍數，因此我們可以當作是"取n/3次三個數字"，再從三個數字中找到最大值並加總
- 題解 :
``` cpp=
#include<bits/stdc++.h>
#define ll long long
#define MXN 100005

using namespace std;
int main(){
    int n,a,b,c,sum=0;
	
    cin >>n,n/=3;
    for(int i=0;i<n;++i){
        cin >>a>>b>>c;
        //判斷最大值
        if(a>=b && a>=c)sum+=a;
        else if(b>=a && b>=c)sum+=b;
        else sum+=c;
    }
    cout<<sum<<'\n';
}
```

----

# ForLoopPractice 3
- 想法1 : 使用動態規劃技巧
- 定義arr[i]=(arr[i-1]*x+arr[i-2]*y)%100000000
- 因為運算途中數字可能就超過上限了，所以要邊做邊取餘數
- 題解:
``` cpp=
#include<bits/stdc++.h>
#define ll long long
#define MXN 100005

using namespace std;
int main(){
    int arr[1000];
    int x,y,n;
	
    arr[1]=1,arr[2]=2;
    cin >>n>>x>>y;
    for(int i=3;i<=n;++i){
    	arr[i]=(arr[i-1]*x+arr[i-2]*y)%100000000;
    }
    cout<<arr[n];
}
```
- 想法2 : $n \leq 30$直接遞迴
###### tags: `題解` 
*2021/12/13 WXDai*