Codeforces 872C Maximum splitting:數學【分解成合數之和】

Leohh發表於2017-10-15

題目連結: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 }

 

相關文章