数字合并游戏测试用例设计

使用 GPT-4o 回答,作者 GPT4oMini.app

问题:

小凯在玩一个数字合并游戏。最开始给定N个正整数,每次可以选相邻的两个相同的数,然后合并成一个比原来的大1的数(例如两个7合并成一个8),目标是使得最大的数最大,请帮助小凯来求最大值。Input输入的第一行包含一个整数N(2≤N≤262144),接下来的N行每行一个序列中的数字,范围在1-40。Output输出一个最大值。

请为以下代码设计几个测试用例:#include <bits/stdc++.h> #define endl "\n" #pragma GCC optimize(3,"Ofast","inline") using namespace std; const int maxn = 262150; const int max_sum = 60; int a[maxn]; int dp[maxn][max_sum];

int main() { ios::sync_with_stdio(false); cin.tie(0), cout.tie(0); int n; cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; }

int maxv = 0;
for (int j = 1; j <= max_sum; j++) {
	for (int i = 1; i <= n; i++) {
		if (a[i] == j)
			dp[i][j] = i + 1;
		else {
			dp[i][j] = dp[dp[i][j - 1]][j - 1];
		}
		if (dp[i][j])
			maxv = max(maxv, j);
	}
}

cout << maxv << endl;

return 0;

}

答案:

为了测试这个代码,我们需要设计一些测试用例来验证其正确性和性能。以下是几个测试用例:

测试用例1:最小输入

输入:

2
1
1

预期输出:

2

解释: 两个1可以合并成一个2。

测试用例2:没有可合并的数字

输入:

3
1
2
3

预期输出:

3

解释: 没有相邻的相同数字,最大值就是3。

测试用例3:所有数字相同

输入:

4
2
2
2
2

预期输出:

4

解释: 两个2合并成一个3,再两个3合并成一个4。

测试用例4:复杂的合并情况

输入:

6
1
1
2
2
3
3

预期输出:

4

解释: 1和1合并成2,2和2合并成3,3和3合并成4。

测试用例5:大规模输入

输入:

10
1
1
1
1
1
1
1
1
1
1

预期输出:

5

解释: 连续合并,最终可以得到一个5。

测试用例6:边界测试

输入:

262144
1
1
1
...
1

预期输出:

19

解释: 连续合并,最终可以得到一个19(因为2^19 = 524288 > 262144)。

测试用例7:随机输入

输入:

5
3
3
2
2
1

预期输出:

4

解释: 3和3合并成4,2和2合并成3,最大值是4。

测试用例8:所有数字不同

输入:

5
1
2
3
4
5

预期输出:

5

解释: 没有相邻的相同数字,最大值就是5。

这些测试用例涵盖了最小输入、没有可合并的数字、所有数字相同、复杂的合并情况、大规模输入、边界测试和随机输入等情况,可以有效地验证代码的正确性和性能。