4621. 三个整数
按要求枚举
void solve()
{
int a,b,c,d;
cin>>a>>b>>c>>d;
int x=0,y=0,z=0;
for(int i=a;i<=b;i++)
for(int j=b;j<=c;j++)
for(int k=c;k<=d;k++)
if(i+j>k)
{
cout<<i<<' '<<j<<' '<<k<<endl;
return;
}
}
4622. 整数拆分
前置知识:哥德巴赫猜想
任意一个大于 4 的偶数都可以拆成两个奇素数之和。
如果是质数,直接返回1—>想办法把这个数拆成尽可能少的质数—>哥德巴赫猜想—>奇偶分类讨论
- 如果是偶数,返回
2
- 如果是奇数,把他拆成n-2,2,如果
n-2
是质数,返回2
,否则拆成n-3
(偶数),3,返回3
bool cmp(int x)
{
for(int i=2;i<=x/i;i++)
if(x%i==0)return false;
return true;
}
void solve()
{
cin>>n;
int res=0;
if(cmp(n))cout<<1<<endl;
else
{
if(n%2==0)cout<<2<<endl;
else
{
if(cmp(n-2))cout<<2<<endl;
else cout<<3<<endl;
}
}
}
4623. 买糖果
直接暴力避免不了TLE。发现在钱数过多时某系列”轮“是重复的,利用这一点对其进行优化
int n,t;
const int N=2e5+10;
bool st[N];
int a[N];
void solve()
{
cin>>n>>t;
rep(i,1,n)cin>>a[i];
int res=0;
while(1)
{
int sum=0,cnt=0;
for(int i=1;i<=n;i++)
{
if(sum+a[i]<=t)
{
sum+=a[i];
cnt++;
}
}
if(!sum)break;
res+=t/sum*cnt;
t%=sum;
}
cout<<res<<endl;
}