iT邦幫忙

2023 iThome 鐵人賽

DAY 3
0

客製化ChatGPT

中文繁簡體轉換,請在ChatGPT Custom instructions
1.What would you like ChatGPT to know about you to provide better responses?(描述自己的背景或情境)
2.How would you like ChatGPT to respond?(調整 ChatGPT 的輸出方式,例如語言、細節)
在2.加入語言=繁體中文

UVA100

ChatGPT 問題輸入:

大學程式能力檢定 UVA100 The 3n + 1 problem 問題的中文與英文描述,包含錯誤處理和邊界檢查的完整C++範例程式碼,用於解決UVA100問題,以及解題思路的解釋

題目描述:
中文:對於給定的一個正整數n,我們定義一個遞迴數列如下:

  • 如果n是偶數,則下一個數是n除以2。
  • 如果n是奇數,則下一個數是3n + 1。

這個遞迴過程持續進行,直到n變為1為止。例如,對於n = 22,這個遞迴過程如下:

22 → 11 → 34 → 17 → 52 → 26 → 13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1

我們想知道對於給定範圍內的所有正整數,哪個數的遞迴過程生成的數字最多。

英文:Consider the following algorithm to generate a sequence of numbers. Start with an integer n:

  • If n is even, divide it by 2.
  • If n is odd, multiply it by 3 and add 1.

Repeat the process with the new value of n, terminating when n becomes 1. For example, the following sequence of numbers will be generated for n = 22:

22 → 11 → 34 → 17 → 52 → 26 → 13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1

Given an input n, it is possible to determine the number of numbers generated before 1 is generated. For example, for n = 22, the sequence length is 16.

You are tasked with finding the integer within a certain range that generates the longest sequence before reaching 1 and outputting both the starting number and the length of the sequence.

範例程式碼:

#include <iostream>
#include <map>

using namespace std;

int getSequenceLength(long long n, map<long long, int>& cache) {
    if (n == 1) {
        return 1;
    }

    if (cache.find(n) != cache.end()) {
        return cache[n];
    }

    int length;
    if (n % 2 == 0) {
        length = 1 + getSequenceLength(n / 2, cache);
    } else {
        length = 1 + getSequenceLength(3 * n + 1, cache);
    }

    cache[n] = length;
    return length;
}

int main() {
    long long n;
    while (cin >> n) {
        long long start = min(n, 1LL); // Initialize the start and end values
        long long end = max(n, 1LL);
        int maxLength = 0;

        map<long long, int> cache;

        for (long long i = start; i <= end; i++) {
            int length = getSequenceLength(i, cache);
            maxLength = max(maxLength, length);
        }

        cout << n << " " << maxLength << endl;
    }

    return 0;
}

這個程式碼會計算在給定範圍內的所有正整數中,哪個數的遞迴過程生成的數字最多,並輸出該數字以及生成的數字的最大長度。

解題思路:

  • 我們使用遞迴來計算每個數的遞迴過程長度,並使用一個緩存(cache)來儲存計算過的結果,以避免重複計算。
  • 我們對給定範圍內的所有數進行計算,並找出生成數字最多的那個數。
  • 最後,我們輸出該數字以及生成的數字的最大長度。

UVA10929

ChatGPT 問題輸入:

大學程式能力檢定 UVA10929 You can say 11 問題的中文與英文描述,包含錯誤處理和邊界檢查的完整C++範例程式碼,用於解決UVA10929問題,以及解題思路的解釋

題目描述:
中文:給定一個正整數n,你的任務是判斷n是否可以被11整除,如果可以,輸出"是",否則輸出"不是"。

英文:Given a positive integer n, your task is to determine if n is divisible by 11. If it is divisible, output "YES," otherwise, output "NO."

範例程式碼:

#include <iostream>
#include <string>

using namespace std;

bool isDivisibleBy11(const string& number) {
    int oddSum = 0;
    int evenSum = 0;
    bool isOdd = true;

    for (char digit : number) {
        if (digit != ' ') {
            int digitValue = digit - '0';

            if (isOdd) {
                oddSum += digitValue;
            } else {
                evenSum += digitValue;
            }

            isOdd = !isOdd;
        }
    }

    int difference = abs(oddSum - evenSum);

    return difference % 11 == 0;
}

int main() {
    string number;
    while (cin >> number) {
        if (number == "0") {
            break; // Input ends with "0"
        }

        bool divisibleBy11 = isDivisibleBy11(number);

        if (divisibleBy11) {
            cout << number << " is a multiple of 11." << endl;
        } else {
            cout << number << " is not a multiple of 11." << endl;
        }
    }

    return 0;
}

這個程式碼會讀取一個正整數n,然後檢查它是否可以被11整除,並輸出相應的結果。

解題思路:

  • 首先定義一個函數isDivisibleBy11,它接受一個表示正整數的字串作為輸入。
  • 在這個函數中,遍歷字串中的每一位數字,並分別將奇數位和偶數位的數字相加,並計算它們的差值。
  • 最後,檢查差值是否可以被11整除,如果可以,則返回true,表示正整數可以被11整除,否則返回false。
  • 在主函數中,不斷讀取輸入,直到遇到輸入為"0"為止,然後使用isDivisibleBy11函數判斷每個輸入的正整數是否可以被11整除,並輸出相應的結果。

上一篇
(DAY 2)CPE一星題庫UVA10055&UVA10035(C/C++)
下一篇
(DAY 4)CPE一星題庫UVA10101&UVA10420(C/C++)
系列文
(C/C++)利用ChatGPT整理CPE(大學程式能力檢定)一星題庫11
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言