解题思路:题目:n个数,最多三个一组,要求拼成6数量的结果最优;

首先我们先接收数据,建立一个数组how[7],函数Count6用来求6的个数,有6(6以上算6),5,4,3,2,1,0(没用),how[1]对应1个6的个数...;

核心思路是尽量用少的6从大往小凑好每一组;

接下来处理数,我们的思路是从5到2开始处理,每个数处理时思路尽量先用最少的6来组成6;

6单独一组放res里

5和任何数(1,2,3,4,5)都能成6,从1开始往里循环消耗

4和2,3,4都能直接成6,特别地要先判断411三数组合,再从2开始往里消耗

//3和3直接成6,要特别地先判断321和322

//2要判断222

在3和2的判断里我简单优化了一下,在只剩数组how3,2,1的时候,只有321用的到1,之后就可以用剩下的(3,2)/6随便拼;



注意事项:

情况要考虑全,我感觉这方法比较普通好想一些,写完要赶快带几种情况试试;

像处理两个5的时候if语句里的判断和{里的内容要改

像只有1个5的时候要及时结束循环
只有3和2可以/6随便拼,往大了会出现555,1个6,却除成了2个6,往小了1用不了

有简化手法或者思路,希望教教我,感谢
参考代码:

#include<bits/stdc++.h>

using namespace std;

int how[7];

int Count6(int n)

{

    int res=0;

    while(n!=0)

    {

      if(n%10==6) res++;

      n/=10;

    }

    if(res>=6) return 6;

    return res;

}

int main()

{

    int n;

    cin>>n;

    for(int a,i=0;i<n;i++)

    {

        cin>>a;

        how[Count6(a)]++;

    }

    int res=how[6];

    int m=1;

    while(how[5])

    {

        if(m==5&&how[5]>1) {res++;how[5]-=2;}

        else 

        if(m==5) break;

        else

        if(how[m]>0) { res++;how[5]--;how[m]--;}

        else m++;

    }

    m=1;

    while(how[4])

    {

        if(m==4&&how[4]>1) {res++;how[4]-=2;}

        else

        if(m==4) break;

        else

        if(how[1]>1) { res++;how[4]--;how[1]-=1;}

        else 

        if(how[m]>0) {res++;how[4]--;how[m]--;}

        else m++;

    }

    // while(how[3])

    // {

    //     if(how[3]>1) {res++;how[3]-=2;}

    //     else if(how[2]>0&&how[1]>0) {res++;how[3]--;how[2]--;how[1]--;}

    //     else if(how[2]>1) {res++;how[3]--;how[2]-=2;}

    //     else break;

    // }

    // while(how[2])

    // {

    //     if(how[2]>2) {res++;how[2]-=3;}

    //     else break;

    // }

    while(how[3]) 

    {

        if(how[2]>0&&how[1]>0) {res++;how[3]--;how[2]--;how[1]--;}

        else break;

    }

    res+=(how[3]*3+how[2]*2)/6;

    cout<<res;

    return 0;

}


点赞(1)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论