程式語言實作練習題 2022.08.13

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

If you like this post, please click the ads on the blog or buy me a coffee. Thank you very much.

第一題:a038: 數字翻轉

a038. 數字翻轉- 高中生程式解題系統

這題常見的解法會類似如下:


也可以用字串來解:




C++程式碼:

  1. #include <iostream>
  2. #include <sstream>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.     string s;
  9.     while(cin >> s)
  10.     {
  11.         short len = s.length();
  12.         bool hasZero = true;
  13.  
  14.         for(short i = len - 1; i >= 0; i--)
  15.         {
  16.             if( s[i] != '0' )   hasZero = false;
  17.             if( !hasZero )  cout << s[i];
  18.         }
  19.         cout << endl;
  20.     }
  21.     return 0;
  22. }
  23.  
  24.  
  25.  
用Python 程式語言來解,短短幾行就解決了!這是因為 python 有Slicing語法可用。

Python程式碼:

1
2
3
4
import sys

for s in sys.stdin: # 輸入數字
    print(int(s[::-1])) # 反轉

第二題:a291: nAnB problem

a291. nAnB problem - 高中生程式解題系統

首先需要了解此題的規則,例如測試資料為

8 4 7 5
4
1 2 3 4
8 1 2 4
4 7 5 8
8 4 7 5

輸出結果會是
1234 ==> 0A1B
8124 ==> 1A1B
4758 ==> 0A4B
8475 ==> 4A0B

了解以上的規則後,就可以用比對的方式計算出有多少個 A與多少個 B了。
可用一層迴圈算出幾個 A。
可用兩層迴圈算出幾個 B。


C++ 程式碼:

  1. #include <cstdio>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. int main() {
  7.     int CNT = 4;
  8.  int answer[CNT];
  9.  int guess[CNT];
  10.  int idx = 0;
  11.     int round = 0;
  12.  
  13.  while( scanf("%d %d %d %d"&answer[0]&answer[1]&answer[2]&answer[3])!=EOF ) {
  14.         scanf("%d"&round);
  15.  
  16.         int a[round] = { 0 };
  17.         int b[round] = { 0 };
  18.  
  19.         idx = 0;
  20.         while( idx < round ) {
  21.             int guessIdx = 0;
  22.             int found[CNT] = { 0 };
  23.  
  24.             while( guessIdx < CNT ) {
  25.                 scanf("%d"&guess[guessIdx]);
  26.  
  27.                 // How many A.
  28.                 if(guess[guessIdx] == answer[guessIdx]) {
  29.                     a[idx]++;
  30.                     found[guessIdx] = 1;
  31.                 } else {
  32.                     found[guessIdx] = 0;
  33.                 }
  34.  
  35.                 guessIdx++;
  36.             }
  37.  
  38.             // How Many B.
  39.             for( guessIdx = 0; guessIdx < CNT; guessIdx++) {
  40.                 if( found[guessIdx] != 1 )
  41.                 for(int answerIdx = 0; answerIdx < CNT; answerIdx++) {
  42.                     if( found[answerIdx] == 0 && (guess[guessIdx] == answer[answerIdx]) && guessIdx != answerIdx ) {
  43.                         b[idx]++;
  44.                         found[answerIdx] = 2;
  45.                         break;
  46.                     }
  47.                 }
  48.             }
  49.  
  50.             idx++;
  51.         }
  52.  
  53.         idx = 0;
  54.         while( idx < round ) {
  55.             printf("%dA%dB\n", a[idx], b[idx]);
  56.             idx++;
  57.         }
  58.  }
  59.  return 0;
  60. }


沒有留言: