zoukankan      html  css  js  c++  java
  • Codeforces 870C Maximum splitting (贪心+找规律)

    <题目链接>

    题目大意:

    给定数字n,让你将其分成合数相加的形式,问你最多能够将其分成几个合数相加。

    解题分析:

    因为要将其分成合数相加的个数最多,所以自然是尽可能地将其分成尽可能小的合数相加的形式。通过找规律,我们能够发现,所有的偶数都能够分成4和6这两个合数的组合,而所有的奇数,在减去9这个最小的奇合数后,就会变成偶数,然后就是和普通偶数一样的处理方式。

    普通偶数的处理方式就是,看他能够分成几个4,如果该偶数不为4的倍数,那么就是将其中的一个4换成6。总的最大合数个数为:$n/4$

    而奇数的个数为:$(n-9)/4+1 =n/4-1 $

    对于那些比较小的数需要特判。

    #include <bits/stdc++.h>
    using namespace std;
    
    int solve(int x){
        if(x==1||x==2||x==3||x==5||x==7||x==11)return -1;    //对比较小的数进行特殊考虑
        int tmp=x/4-x%2;     //进行奇偶的处理
        return tmp?tmp:-1;
    }
    
    int main(){
        int n;
        while(~scanf("%d",&n)){
            while(n--){
                int x;scanf("%d",&x);
                printf("%d
    ",solve(x));
            }
        }
    }
  • 相关阅读:
    css盒子模型 ( 基本针对兼容性问题有点帮助 )
    11.5 Array 数组
    11.5笔记 数组去重
    11.5笔记 函数
    11..2笔记 对象
    11.1笔记
    10.31笔记
    10.31笔记 作用域链
    10.15笔记 js
    10.8补
  • 原文地址:https://www.cnblogs.com/00isok/p/10539487.html
Copyright © 2011-2022 走看看