返回列表 發帖

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

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

  3. int up,lef;
  4. int o=1,n=1;
  5. int t=0,tcount=1;
  6. vector<int> v;

  7. int main()
  8. {
  9.     int a,c;
  10.     cin>>a>>c;
  11.     if(a%2==0)
  12.     {
  13.         cout<<"error";
  14.         return 0;
  15.     }
  16.     int b[a][a];
  17.     for(int i=0;i<a;i++)
  18.         for(int j=0;j<a;j++)
  19.             cin>>b[i][j];

  20.     int a1=a/2,a2=a/2;
  21.     int a1y=a/2,a2y=a/2;
  22.     if(c==0)
  23.     {
  24.         lef=-1;
  25.         up=-1;
  26.     }
  27.     else if(c==1)
  28.     {
  29.         lef=1;
  30.         up=-1;
  31.     }
  32.     else if(c==2)
  33.     {
  34.         lef=1;
  35.         up=1;
  36.     }
  37.     else if(c==3)
  38.     {
  39.         lef=-1;
  40.         up=1;
  41.     }
  42.     v.push_back(b[a1][a2]);
  43.     while(o!=0)
  44.     {
  45.         if(c%2==0)//移動
  46.         {
  47.             for(int i=0;i<tcount;i++)
  48.             {
  49.                 a2+=lef;
  50.                 if(a2<0)
  51.                     {
  52.                         a2=0;
  53.                         v.push_back(b[a1][a2]);
  54.                         o=0;
  55.                         break;
  56.                     }
  57.                     else if(a2>=a)
  58.                     {
  59.                         a2=a-1;
  60.                         v.push_back(b[a1][a2]);
  61.                         o=0;
  62.                         break;
  63.                     }
  64.                     else
  65.                     {
  66.                         v.push_back(b[a1][a2]);
  67.                     }
  68.             }
  69.         }
  70.         else
  71.         {
  72.             for(int i=0;i<tcount;i++)
  73.             {
  74.                 a1+=up;
  75.                 if(a1<0)
  76.                     {
  77.                         a1=0;
  78.                         v.push_back(b[a1][a2]);
  79.                         o=0;
  80.                         break;
  81.                     }
  82.                     else if(a1>=a)
  83.                     {
  84.                         a1=a-1;
  85.                         v.push_back(b[a1][a2]);
  86.                         o=0;
  87.                         break;
  88.                     }
  89.                     else
  90.                     {
  91.                         v.push_back(b[a1][a2]);
  92.                     }
  93.             }
  94.         }
  95. ///////////////////////////////////////////////////////////////判斷
  96.         if(o==0)
  97.         {
  98.             break;
  99.         }
  100. //////////////////////////////////////////////////////////移動
  101.         if(c%2==0)//移動
  102.         {
  103.             for(int i=0;i<tcount;i++)
  104.             {
  105.                 a1+=up;
  106.                 if(a1<0)
  107.                     {
  108.                         a1=0;
  109.                         v.push_back(b[a1][a2]);
  110.                         o=0;
  111.                         break;
  112.                     }
  113.                     else if(a1>=a)
  114.                     {
  115.                         a1=a-1;
  116.                         v.push_back(b[a1][a2]);
  117.                         o=0;
  118.                         break;
  119.                     }
  120.                     else
  121.                     {
  122.                         v.push_back(b[a1][a2]);
  123.                     }
  124.             }
  125.         }
  126.         else
  127.         {
  128.             for(int i=0;i<tcount;i++)
  129.             {
  130.                 a2+=lef;
  131.                 if(a2<0)
  132.                     {
  133.                         a2=0;
  134.                         v.push_back(b[a1][a2]);
  135.                         o=0;
  136.                         break;
  137.                     }
  138.                     else if(a2>=a)
  139.                     {
  140.                         a2=a-1;
  141.                         v.push_back(b[a1][a2]);
  142.                         o=0;
  143.                         break;
  144.                     }
  145.                     else
  146.                     {
  147.                         v.push_back(b[a1][a2]);
  148.                     }
  149.             }
  150.         }
  151. //////////////////////////////////////////////////////////判斷
  152. //        if(a1<0)
  153. //        {
  154. //            a1=0;
  155. //            v.push_back(b[a1][a2]);
  156. //            o=0;
  157. //            continue;
  158. //        }
  159. //        else if(a1>=a)
  160. //        {
  161. //            a1=a-1;
  162. //            v.push_back(b[a1][a2]);
  163. //            o=0;
  164. //            continue;
  165. //        }
  166. //        else if(a2<0)
  167. //        {
  168. //            a2=0;
  169. //            v.push_back(b[a1][a2]);
  170. //            o=0;
  171. //            continue;
  172. //        }
  173. //        else if(a2>=a)
  174. //        {
  175. //            a2=a-1;
  176. //            v.push_back(b[a1][a2]);
  177. //            o=0;
  178. //            continue;
  179. //        }
  180. //        v.push_back(b[a1][a2]);
  181. ///////////////////////////////////////////////////////////////改變
  182.         tcount++;
  183.         lef*=-1;
  184.         up*=-1;
  185.     }
  186.     for(int i=0;i<v.size()-1;i++)
  187.     {
  188.         cout<<v[i];
  189.     }
  190.     cout<<endl;
  191.     return 0;
  192. }
複製代碼

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

返回列表