$\Huge\color{green}{春季每日一题2022题解集合}$
没啥好讲的,就是氵题一道
最简单的方法,一个个算过去
不过呢也可以只算三遍,因为后面的就都是重复的了
代码仅供参考
#include<bits/stdc++.h>
using namespace std;
int v[10],c[10];
int main(){
for(int i=1;i<=3;i++) scanf("%d%d",&v[i],&c[i]);
int s1,s2,s3;
for(int i=1;i<=100;i++){
if(i%3==1){ //A to B
s1=min(c[1],v[2]-c[2]);
c[1]-=s1;
c[2]+=s1;
}
if(i%3==2){ //B to C
s2=min(c[2],v[3]-c[3]);
c[2]-=s2;
c[3]+=s2;
}
if(i%3==0){ //C to A
s3=min(c[3],v[1]-c[1]);
c[3]-=s3;
c[1]+=s3;
}
}
for(int i=1;i<=3;i++) cout<<c[i]<<endl;
return 0;
}
程序二号(优化版,更简洁)
#include<bits/stdc++.h>
using namespace std;
int v[10],c[10];
int main(){
for(int i=1;i<=3;i++) scanf("%d%d",&v[i],&c[i]);
int s1,s2,s3,s4;
for(int i=1;i<=3;i++){
s1=c[1]+c[2];
c[2]=min(s1,v[2]);
c[1]=max(s1,v[2])-v[2];
s2=c[2]+c[3];
c[3]=min(s2,v[3]);
c[2]=max(s2,v[3])-v[3];
s3=c[1]+c[3];
c[1]=min(s3,v[1]);
c[3]=max(s3,v[1])-v[1];
}
s4=c[1]+c[2]; //注意!这还要算一次额外的 A to B ,别漏了……
c[2]=min(s4,v[2]);
c[1]=max(s4,v[2])-v[2];
for(int i=1;i<=3;i++) cout<<c[i]<<endl;
return 0;
}
大佬们点个赞吧