水的瓶数分别是三个部门人数的倍数,所以首先要找到三个部门人数的最小公倍数,这样可以节省循环时间。每次循环i=i+最小公倍数,再判断i除以3之后是否能取余各部门人数为0。
#include<iostream> using namespace std; int main() { int n,a,b,c,x,y,z,f,g,h; cin>>a>>b>>c; f=a; g=b; h=c; x=a*b; while(a!=b) { if(a>b) a=a-b; else b=b-a; } y=x/a; z=y*c; while(y!=c) { if(y>c) y=y-c; else c=c-y; } for(int i=z/y;;i=i+(z/y)) { if(i/3%f==0 && i/3%g==0 && i/3%h==0) { cout<<i; break; } } }