Codeforces 872C Maximum splitting:数学【分解成合数之和】

题目链接:http://codeforces.com/contest/872/problem/C

题意:

  给你一个数n,问你最多能将n分解成多少个合数之和。(若不能分解,输出-1)

题解:

  若要让合数个数最多,则n必定只由4,6,9组成。

  n由n/4和n%4两部分组成。

  四种情况:

    (1)n%4 == 0:

      全分成4就好了,所以ans = n/4

    (2)n%4 == 1:

      剩下的1要和两个4组合成一个9。

      所以如果n/4 >= 2,ans = n/4 - 1

      否则ans = -1

    (3)n%4 == 2:

      剩下的2要和一个4组合成一个6。

      所以如果n/4 >= 1,ans = n/4

      否则ans = -1

    (4)n%4 == 3:

      剩下的3 = 1 + 2。所以需要三个4,组成一个6和一个9。

      所以如果n/4 >= 3,ans = n/4 - 1

AC Code:

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 
 5 using namespace std;
 6 
 7 int n,t;
 8 
 9 int main()
10 {
11     cin>>t;
12     while(t--)
13     {
14         cin>>n;
15         if(n%4==0) cout<<n/4<<endl;
16         else if(n%4==2)
17         {
18             if(n/4>=1) cout<<n/4<<endl;
19             else cout<<-1<<endl;
20         }
21         else if(n%4==1)
22         {
23             if(n/4>=2) cout<<n/4-1<<endl;
24             else cout<<-1<<endl;
25         }
26         else
27         {
28             if(n/4>=3) cout<<n/4-1<<endl;
29             else cout<<-1<<endl;
30         }
31     }
32 }
原文地址:https://www.cnblogs.com/Leohh/p/7673781.html