康娜的糖果(C++)

文章提供了一个编程问题的描述,涉及到处理糖果编号和事件的操作。题目中,康娜对糖果进行选择和询问,需要编写程序根据事件类型(吃糖或询问数量)更新和回答。解决方案包括使用数组记录糖果种类的数量,通过遍历事件并根据事件类型调整数组值来实现。
摘要由CSDN通过智能技术生成

题目描述 

康娜喜欢吃糖。于是托尔为她准备了一些糖。康娜会选择一些吃。

糖果总共有 n 颗,每颗糖果属于一个种类,而每一个种类有一个独一无二的编号。

我们假设第 i 颗糖果编号为 ai​,并且总共会发生 m 个事件:

事件1:康娜吃掉了一颗糖果

事件2:康娜在询问你现在某种糖果有多少颗。

输入格式

第一行是两个整数 n ,m 意义如题面所述。

接下来一行是 n 个正整数,第 i 个数表示 ai。​

接下来 m 行,每行两个数 opt 和 x。

如果 opt=1 表示发生的是事件1,此时x表示康娜吃掉了一颗编号为x的糖果。

如果 opt=2 表示发生的是事件2,此时x表示康娜在问你编号为x的糖果有几颗。

输出格式

若干行,对于每一次事件2,请输出一个数表示答案。

输入 #1 

5 2

1 2 3 4 2

1 1

2 2

输出 #1 

2


亿年不变的 分析:

首先,我们知道一共有N颗糖果,M个事件,N颗糖果用数组A记录,也就是

for(int i=1;i<=n;i++)
        cin>>a[i];

然后事件用变量opt,糖果用变量x进行储存

 for(int i=1;i<=m;i++)
{
        int opt,x;
        cin>>opt>>x;

 }

然后是两种事件的判断(提示:要写在opt的循环里)

for(int i=1;i<=m;i++)
{

        int opt,x;
        cin>>opt>>x;
        if(opt==1) 
        else if(opt==2) 

}

那中间该咋办呢?

我们可以写一个桶ret,记录每个 糖果编号的出现次数。

当事件是1时ret[x]--。

事件是2时cout<<ret[x]<<endl。(别忘了换行)

这不就出代码了。


代码:

#include <bits/stdc++.h>
using namespace std;
int a[1010],ret[1010];
int main()
{
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		ret[a[i]]++;
	}
	for(int i=1;i<=m;i++)
	{
		int opt,x;
		cin>>opt>>x;
		if(opt==1) ret[x]--;//如果是事件1,ret[x]--;
		else if(opt==2) cout<<ret[x]<<endl;//如果是事件2,输出ret[x];
	}
	return 0;
}

别抄,作者相信你看完解析会做


希望对你有帮助!!

(有问题可以在评论区讨论)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值