英雄卡。小明非常迷恋收集各种干脆面里面的英雄卡,为此他曾经连续一个月都只吃干脆面这一种零食,但是有些稀有英雄卡真的是太难收集到了。后来某商场搞了一次英雄卡兑换活动,只要你有三张编号连续的英雄卡,你就可以换任意编号的英雄卡。小明想知道他最多可以换到几张英雄卡(新换来的英雄卡不可以再次兑换) 输入提示信息:"请输入数据范围(在1~10000之间):", "请输入数据:" 输入数据格式:"%d" 输出数据格式:"%d" 程序运行结果示例: 请输入数据范围(在1~10000之间):6 请输入数据:3 1 2 4 4 5 1
时间: 2024-02-15 17:03:59 浏览: 143
用一个故事讲完CPU的工作原理
根据题目描述,我们可以使用一个数组来记录每个卡片出现的次数。具体实现如下:
```c
#include <stdio.h>
int a[200005];
int main() {
int n,i,cnt=0,l,max=0; //cnt记录最多能换英雄卡的数量,max记录下出现的最大编号数
printf("请输入数据范围(在1~10000之间):");
scanf("%d",&n);
printf("请输入数据:");
while(n--){
scanf("%d",&l);
a[l]++; //对应a[l]++
if(l>max) max=l; //更新max
}
for(i=1;i<=max;i++){
while(a[i]>0&&a[i+1]>0&&a[i+2]>0){ //连续三张都有,那么可换
cnt++;
a[i]--; //三张都减少一张
a[i+1]--;
a[i+2]--;
}
}
printf("%d\n",cnt);
return 0;
}
```
输入数据示例:`6 3 1 2 4 4 5 1`
输出结果为:`1`,表示最多只能换一张英雄卡。
需要注意的是,对于输入数据的范围,代码中假设在 1~10000 之间。如果实际情况不符,可能需要对代码进行一些修改。
阅读全文