已经变成数学的形状了传送门
题目描述
给出n个数,可以两两配对(首位相连,比如13 ,78 变成1378 或7813),每个数只能使用一次,最多能有几个三的倍数,没匹配的数不考虑
解题思路
直接讲数学规律:一个数对3取模,要么模为1,要么模为2,要么是0;
两个数配对之后,如果是3的倍数,要满足这样的数学规律:它们的余数之和想加为3的倍数,或者是0;
这个数学规律还是比较好发现的,我自己在模拟的时候,找到了 13 和 23,随后发现13对3取模是1,23对3取模是2,相加刚好是3,所以就慢慢推导出了这个规律
ac✅️代码
#include<bits/stdc++.h>
using namespace std;
int cnt1,cnt2,cnt3;
int main( )
{
int n;cin>>n;
for(int i = 0 ; i < n ; i++)
{
int x;cin>>x;
int rem = x % 3;
if(rem == 1) cnt1 ++;
else if(rem == 2) cnt2++;
else cnt3 ++;
}
int ans = 0;
if(cnt1 != 0 && cnt2 != 0) ans += min(cnt1,cnt2);
ans += cnt3/2;
cout<<ans<<endl;
// cout<<cnt / 2 <<endl;
return 0;
}