每日编程中遇到任何疑问、意见、建议请公众号留言或加入每日编程群聊739635399
1-20号牌,输入牌的数目,以及每张牌的编号。只有三张连续的牌可以兑换一张新牌,新牌不能参与兑换。编程实现计算可兑换的牌数。
输入格式:
输入牌的数量
输入牌的编号
输出格式:
能兑换的牌的数量输入样例:
10
1 1 2 2 3 5 5 6 7 9
输出样例:
2
解决方法:
(1)算法的基本思想:
遍历整个牌组,找到可以兑换的牌组,则进行兑换,直到不足兑换为止。然后继续向后遍历。
(2)代码实现:
#include <iostream>
using namespace std;
int main(void)
{
int card[20]; //用于存放各牌号的数目
int canChange = 0; //计数可兑换的牌数
int n; //牌数
//初始化牌数
for (int i = 0; i < 20; i++)
{
card[i] = 0;
}
//提示输入牌数
cout << "请输入牌数:" << endl;
cin >> n;
//提示输入每张牌的编号
cout << "输入牌的编号:" << endl;
for (int i = 0; i < n; i++)
{
int t;
cin >> t;
card[t - 1]++;
}
//遍历牌组,进行兑换
int s; //定义工作指针
while (s <= (n - 3))
{
if ((card[s] >= 1) && (card[s + 1] >= 1) && (card[s + 2] >= 1))
{
card[s]--;
card[s + 1]--;
card[s + 2]--;
canChange++;
}
else
{
s++;
}
}
cout << "能兑换" << canChange << "张牌" << endl;
return 0;
}
输入格式:
输入n
输出格式:
输出计算结果输入样例:
32
输出样例:
940313