这是第一篇的。
#include<bits/stdc++.h>
using namespace std;
long long x,y,z,k,ans=1;//记得将 ans 初始化成 1, 否则当 k=0 时 , 就会输出 0, 而不是 1
int main(){
cin>>x>>y>>z>>k;
x--,y--,z--;//x y z 全都减一 , 因为这是方块个数 , 而非缝隙个数
if(x>y)swap(x,y);//类似于冒泡排序
if(y>z)swap(y,z);
if(x>y)swap(x,y);
if(x<k/3)ans*=x+1,k-=x;
else{
ans*=k/3+1;
k-=k/3;
}
if(y<k/2)ans*=y+1,k-=y;
else{
ans*=k/2+1;
k-=k/2;
}
if(z<k)ans*=z+1;
else ans*=k+1;
cout<<ans;
return 0;
}
第二篇。
#include <bits/stdc++.h>
using namespace std;
long long ans=1;//当k=0时,应该输出1,所以要将ans初始化成1。
long long x,y,z,k;
int main(){
cin>>x>>y>>z>>k;
x--;
y--;
z--;////x、y、z全都减一,因为它们是方块个数,而不是缝隙个数。
if(x>y) swap(x,y);
if(y>z) swap(y,z);
if(x>y) swap(x,y);//用swap排序
if(x<k/3){//不能直接除的情况
ans*=x+1;
k-=x;
}
else{//可以直接除
ans*=k/3+1;
k-=k/3;
}
if(y<k/2){
ans*=y+1;
k-=y;
}
else{
ans*=k/2+1;
k-=k/2;
}
if(z<k) ans*=z+1;
else ans*=k+1;
cout<<ans<<endl;
return 0;//完美结束
}