返回列表 發帖

2024/06/07 課堂重點(宗儒)

本帖最後由 鄭繼威 於 2024-6-7 17:43 編輯

2024/06/07 課程重點


上次

[抽考]


[APCS]
10510https://docs.google.com/forms/d/ ... n6TyHu5YhQ/viewform


10610_02_交錯字串
10603_03_數字龍捲風

[作業]
練習[KitaJudge] 501~510實作並通過AC
https://meet.google.com/rcd-crxn-qmz

數字龍捲風
  1. #include <iostream>
  2. using namespace std;

  3. int main()
  4. {
  5.     int N,d;
  6.     cin>>N>>d;//N是二維陣列d是起始方向

  7.     int a[N][N];//二維陣列
  8.     for(int i=0;i<N;i++)//輸入二維陣列的值
  9.             for(int j=0;j<N;j++)
  10.                 cin>>a[i][j];

  11.     int dx[4]={-1,0,1,0};//向左,向上,向右,向下時,座標x值的改變
  12.     int dy[4]={0,-1,0,1};//向左,向上,向右,向下時,座標y值的改變
  13.     int x=N/2;//起始點x
  14.     int y=N/2;//起始點y
  15.     cout << a[y][x];//起始點的陣列索引

  16.     int countdown=N*N-1;//總共要移動幾步
  17.     int cnt=0;//換方向時計算用
  18.     int step=1;//先設定每走一步會換方向
  19.     while(true){
  20.         for(int i=0;i<step;i++){    //此迴圈控制每走幾步要換方向
  21.             y=y+dy[d];  //新座標的y值
  22.             x=x+dx[d];  //新座標的x值
  23.             cout<<a[y][x];  //輸出新座標的陣列值
  24.             countdown--;    //總步數減1
  25.             if(countdown==0)
  26.             {
  27.                 break;  //若走完全程才離開迴圈
  28.             }
  29.        }
  30.        if(countdown==0)
  31.        {
  32.            break;
  33.        }
  34.        d++;//換下個方向
  35.        d=d%4;//限制d介於0~3範圍
  36.        cnt++;//換方向的次數
  37.        if(cnt%2==0){//若換方向的次數為偶數
  38.             step++;//每一方向就再多走一步
  39.        }
  40.     }
  41.         return 0;
  42. }
複製代碼

TOP

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. //Q21
  4. int F(int x,int y)
  5. {
  6.     if(x<1)
  7.     {
  8.         return 1;
  9.     }
  10.     else
  11.     {
  12.         return F(x-y,y)+F(x-2*y,y);
  13.     }
  14. }

  15. int main()
  16. {
  17.     cout<<F(4,3);

  18.     return 0;
  19. }
複製代碼

TOP

  1. #include<bits/stdc++.h>
  2. using namespace std;

  3. //Q20
  4. int g1 = 20, g2 = 10;
  5. int f1(int v) {
  6.     int g1 = 5;
  7.     return g1+v;
  8. }
  9. int f2(int v) {
  10.     int c = g2;
  11.     v = v+c+g1;
  12.     g1 = 10;
  13.     c = 40;
  14.     return v;
  15. }
  16. int main() {
  17.     g2 = 0;
  18.     g2 = f1(g2);
  19.     printf("%d", f2(f2(g2)));
  20.     return 0;
  21. }
複製代碼

TOP

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int n=0;

  4. int F(int a)
  5. {
  6.     //Q16
  7.     if ( _____?_____ )
  8.         return a * 2 + 3;
  9.     else
  10.         return a * 3 + 1;
  11. }


  12. int main()
  13. {
  14.     cout<<F();
  15.    
  16.     return 0;
  17. }
複製代碼

TOP

本帖最後由 鄭繼威 於 2024-6-12 18:11 編輯

交錯字串
  1. #include<iostream>
  2. using namespace std;

  3. int main(){
  4.     int k,w=0,c=0,mxc=0;//k交錯字串,同類寬度,交錯子字串長度,交錯最長子字串
  5.     string s;
  6.     cin >> k >> s;
  7.     for (int i=0; i<s.size(); i++){ //遍歷s字串每個字元
  8.         if((i!=0)&&((isupper(s[i])  &&  islower(s[i-1]))  ||  (  islower(s[i])  &&  isupper(s[i-1])) )  )
  9.         {
  10.             //若i不是0(i-1才不會變-1),而且大小寫改變,就要結算相同字體的寬度
  11.             if(w<k)//寬度不足
  12.                c=0;//字串長度歸零重算
  13.             w=0; //寬度歸零重算else
  14.         }
  15.         w++;//大小寫未改,就累加寬度
  16.         if(w==k)//若寬度=k
  17.            c+=k;//字串長度+k
  18.         else if(w>k)//寬度太大
  19.            c=k;//取右邊k個字元`

  20.         mxc=c>mxc?c:mxc;//更新mxc
  21.     }
  22.     cout<< mxc <<endl;
  23.     return 0;
  24. }
複製代碼

TOP

返回列表