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