有若干随机数字卡片,从中抽出一段连续的卡片,若卡片上的数字是奇数,则得一分,若卡片上的数字是偶数,则扣一分。现希望分值尽可能大,那么最多可以是几分。
输入格式:
第一行包含一个整数n,表示共有n个卡片
第二行包含n个正整数,表示从左到右每张卡片上的数字。
输出格式:
一个整数表示最多可以几分
样例输入:
10
32 25 21 30 35 24 21 23 26 28
样例输出:
3
样例说明:
选择第2张至第8张卡片,此时有5奇数卡片,2张偶数卡片,分值最大,为3分。
引用chatgpt的回答:
首先,我们可以通过输入随机数字卡片的数量以及对应数字,来模拟这个问题。然后,我们需要循环遍历这些数字,统计当前连续数字段的分值并记录最大分值。
具体的实现过程如下:
#include <iostream>
using namespace std;
int main()
{
int n; // 随机数字卡片的数量
cin >> n;
int score = 0; // 当前连续数字段的分值
int maxScore = 0; // 最大分值
for (int i = 0; i < n; i++) {
int num;
cin >> num;
if (num % 2 == 0) { // 如果是偶数,则扣一分
score--;
} else { // 如果是奇数,则得一分
score++;
}
if (score > maxScore) { // 如果当前分值大于最大分值,则更新最大分值
maxScore = score;
}
if (score < 0) { // 如果当前连续数字段的分值小于0,则重置为0
score = 0;
}
}
cout << maxScore << endl; // 输出最大分值
return 0;
}
在这个程序中,我们使用了两个变量score和maxScore来记录当前连续数字段的分值和最大分值。每次读入一个数字后,如果是偶数,则将score减去1,否则将score加上1。同时,我们判断当前的score是否比maxScore大,如果是,则更新maxScore的值。最后,输出maxScore的值即可。
这个程序没有使用数组,而是直接使用一个循环来遍历输入的数字,因此效率可能会比使用数组更慢。但是,对于输入数据较小的情况,这个程序已经足够解决问题了。