“……在 2002 年 6 月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字。只要凑齐所有百事球星的名字,就可参加百事世界杯之旅的抽奖活动,获得球星背包,随声听,更可赴日韩观看世界杯。还不赶快行动!”
你关上电视,心想:假设有 �n 个不同的球星名字,每个名字出现的概率相同,平均需要买几瓶饮料才能凑齐所有的名字呢?
输入只有一行一个整数,表示不同球星名字的个数 �n。
输出凑齐所有的名字平均需要买的饮料瓶数。如果是一个整数,则直接输出,否则应该直接按照分数格式输出,例如五又二十分之三应该输出为:
- 3
- 5--
- 20
第一行是分数部分的分子,第二行首先是整数部分,然后是由减号组成的分数线,第三行是分母。减号的个数应等于分母的位数。分子和分母的首位都与第一个减号对齐。
分数必须是不可约的。
输入 #1复制
2
输出 #1复制
3
输入 #2复制
17
输出 #2复制
340463 58------ 720720
对于全部的测试点,保证 2≤n≤33。
上代码:
- #include
- #include
- using namespace std;
-
- typedef long long ll;
- ll f[37],a[37],b[37],n,ans1=0,ans2=1,ans3;
-
- ll gcd(ll x,ll y){
- if(x==0){
- return y;
- }
- return gcd(y%x,x);
- }
-
- ll lcm(ll x,ll y){
- return x/gcd(x,y)*y;
- }
-
- ll duliu(ll x){
- ll res=0;
- while(x){
- x=x/10;
- res++;
- }
- return res;
- }
-
- int main(){
- cin>>n;
- for(ll i=1;i<=n;i++){
- ll g=gcd(i,n);
- a[i]=n/g;
- b[i]=i/g;
- }
- for(ll i=1;i<=n;i++){
- ans2=lcm(ans2,b[i]);
- }
- for(ll i=1;i<=n;i++){
- ans1=ans1+ans2/b[i]*a[i];
- }
- ll g=gcd(ans1,ans2);
- ans1=ans1/g;
- ans2=ans2/g;
- if(ans1%ans2==0){
- cout<
- return 0;
- }
- ans3=ans1/ans2;
- ans1=ans1%ans2;
- ll duliu3=duliu(ans3);
- ll duliu1=duliu(ans2);
- for(ll i=1;i<=duliu3;i++){
- cout<<" ";
- }
- cout<
- cout<
- for(ll i=1;i<=duliu1;i++){
- cout<<"-";
- }
- cout<
- for(ll i=1;i<=duliu3;i++){
- cout<<" ";
- }
- cout<
- return 0;
- }
-
相关阅读:
Spring 自定义事件,通过注解的方式来实现事件监听
深入浅出Flask PIN
SpaceX间接「颠覆」了手机?星链如何直连手机通信?
【C++】——互斥锁的使用(lock_guard)
伪元素与伪类
05、SpringCloud之Hystrix组件学习笔记
浅谈Git架构和如何避免代码覆盖的事故
Spring入门程序(二)
初识微服务技术栈
JAVA设计模式 —— 软件设计六大原则
-
原文地址:https://blog.csdn.net/m0_72829993/article/details/139531872