关于算法:基础算法枚举

46次阅读

共计 550 个字符,预计需要花费 2 分钟才能阅读完成。

MT2001

你有 n 个数,能够将它们两两匹配 (行将两数首尾相连),每个数只能应用一次,问匹配后最多有多少个 3 的倍数(没有进行匹配的数不算)?

 输出格局:第一行一个 n,接下来输出 n 个正整数
输入格局:输入最多有多少个 3 的倍数
 输出:3
123 123 99
输入:1

解:任意一个正整数对 3 取余有三种可能,别离是 0,1,2;
123%3=0 123%3=0 99%3=0,所以组合状况有 123123 12399 12399,由题意可知不能重 复应用每一个数,所以只有一种可能,即在 123123 12399 二选一

 当输出数为 4 5 7 8 10:

4%3=1 5%3=2 7%3=1 8%3=2 10%3=1,对于对 3 取余的数为 1 or 2 时,余数为 1 和余数为 2 的数组合,能力是 3 的倍数,又因为不能反复,所以记 %3= 1 的数有 y 个,%3= 2 的数有 Z 个,所以 min(y,z)y 与 z 的最小值是能组成不反复数的最大数

#include<bits/stdc++.h> 
using namespace std;
int n,m;

int main( )
{
    cin>>n;
    int x=0,y=0,z=0;
    for(int i=0;i<n;i++)
    {
        cin>>m;
        if(m%3==0)
            x++;
        else if(m%3==1)
            y++;
        else
            z++;
    }
  cout<<x/2+min(y,z);   
  


    return 0;
}

正文完
 0