题意:
a<=b<=c
输出A,B,C要求B是A的倍数,C是B的倍数,并且输出a,b,c变成A,B,C需要的最小次数。
题解:写了半天的二分,后来发现思路错了,,,暴力就能过。。
三层for,第二层是第一层的倍数,第三层是第二层的倍数。。。。
#include<bits/stdc++.h> using namespace std; typedef long long ll; const ll N=1e4; const ll INF=1e18+7; struct stu { ll a,b,c; }x; void solve(){ ll a1,b1,c1; cin>>a1>>b1>>c1; ll ans=INF; for(ll a=1;a<=N;a++){ for(ll b=a;b<=N+N;b+=a){ for(ll c=b;c<=N+N+N;c+=b){ ll sum=abs(c-c1)+abs(b1-b)+abs(a1-a); if(sum<ans){ ans=sum; x.a=a; x.b=b; x.c=c; } } } } cout<<ans<<endl; cout<<x.a<<" "<<x.b<<" "<<x.c<<endl; } int main(){ ll t; ios::sync_with_stdio(0); cin>>t; while(t--) solve(); return 0; }