NC200318. Sweet
描述
幼稚园有n个小幼稚,编号1~n由左至右,站成一排。幼稚长从左向右发糖果,每a个小幼稚获得一个糖果(a号是第一个得到糖果的),从右往左发饼干,每b个小幼稚获得一个饼干((n-b+1)号是第一个得到饼干的)。 幼稚长想要知道有多少小幼稚既获得了糖果又获得了饼干。
输入描述
输入三个正整数n, a, b。
数据规范:
*
* .
输出描述
输出一个整数,表示有多少小幼稚既获得了糖果又获得了饼干。
示例1
输入:
7 3 4
输出:
0
说明:
7个小幼稚 从左往右每3个小幼稚发糖果,从右往左每4个小幼稚发饼干示例2
输入:
8 3 2
输出:
1
说明:
8个小幼稚 从左往右每3个小幼稚发糖果,从右往左每2个小幼稚发饼干C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 508K, 提交时间: 2020-06-15 14:01:53
#include<bits/stdc++.h> using namespace std; typedef long long ll; int main(){ ll n,a,b; scanf("%lld %lld %lld",&n,&a,&b); ll i; for(i=n%b+1;i<=n;i+=b){ if(i%a==0)break; } ll ans=(n-i)/((a*b)/__gcd(a,b))+1; if(i>n){ printf("0\n"); }else{ printf("%lld\n",ans); } return 0; }
C++(clang++ 11.0.1) 解法, 执行用时: 4ms, 内存消耗: 452K, 提交时间: 2022-12-18 17:00:06
#include<bits/stdc++.h> using namespace std; int main() { long long n,a,b,i,m,cnt; cin>>n>>a>>b; for(i=n%b+1;i<=n;i+=b){ if(i%a==0){ break; } } if(i>n){ cnt=0; }else{ m=(a*b)/(__gcd(a,b)); cnt=(n-i)/m+1; } cout<<cnt; }