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 }