请C++写段代码禾木与数字游戏 题目描述 星宇博士给禾木出了一道数字游戏。 禾木会得到几个整数。a_{1},a_{2}, \cdots ,a_{n}。。禾木可以从这些整数中不断挑出两个数字相加,如果它们的和是3的倍数,则这两个整数就被消除,直到不能再消除数字为止。 请问禾木最多能消除多少对数字?
时间: 2023-06-08 21:07:48 浏览: 116
c++ 猜数字游戏代码
5星 · 资源好评率100%
请见以下代码:
```c
#include <stdio.h>
int main() {
int n, i, a, cnt0 = 0, cnt1 = 0, cnt2 = 0;
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d", &a);
if (a % 3 == 0) cnt0++;
else if (a % 3 == 1) cnt1++;
else cnt2++;
}
int ans = cnt0 * (cnt0 - 1) / 2 + cnt1 * cnt2;
printf("%d", ans);
return 0;
}
```
本题思路如下:
将输入的整数中余3等于0、1、2的数字分别统计在 cnt0、cnt1、cnt2 三个变量中。
对于任意两个数字 a、b,如果它们余数之和是3,那么a+b就能被3整除,它们就可以被消除。于是我们分别统计了cnt0个余数为0的数字,那么它们两两之间能消除的情况数就是 cnt0 * (cnt0 - 1) / 2。同时,余数为1、余数为2的数字之间就可以相互消除,于是它们两两之间的情况数就是 cnt1 * cnt2。
最终结果就是两种情况数的和。
输入样例:
5
1 2 3 4 5
输出样例:
3
阅读全文