先來說說題意。將一個數剖成一些合數,問最多能剖成多少個。
我們知道,最小的合數是4,所以貪心思路就是儘量多的get到4這個合數。
分析一下,顯然,如果這個數是4的倍數,直接除4;如果除4餘2,那麼不妨來思考一下,除以4之後剩下一個2,剛好可以和4湊一個6。
而對於除4餘1的情況,我們發現1+4+4=9是個合數,所以這裏需要兩個4才能湊出來,也就是a/4-1。對於除4餘3的情況,3+4+4+4=15是個合數。但是要注意,15=6+9也是可拆的,所以相當於-3個4又+了2,所以還是/4-1。
當然,對於某些數需要特判一下。
#include <iostream>
using namespace std;
int main(){
long long q,n;
cin>>q;
while(q--){
cin>>n;
if(n<4||n==5||n==7||n==11){
cout<<-1<<endl;
}else if(n%4==0||n%4==2) {
cout<<n/4<<endl;
}else if(n%4==1||n%4==3){
cout<<n/4-1<<endl;
}
}
return 0;
}
果然今天不適宜模擬賽(