迴圈練習的題解


ForLoopPractice 1

  • 想法 : 如果可以被2整除就代表他是偶數,否則為奇數。直接一個迴圈即可
  • 題解 :
#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次三個數字",再從三個數字中找到最大值並加總
  • 題解 :
#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
  • 因為運算途中數字可能就超過上限了,所以要邊做邊取餘數
  • 題解:
#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 :
    n30
    直接遞迴
tags: 題解

2021/12/13 WXDai