最大比例

X星球的某个大奖赛设了M级奖励。每个级别的奖金是一个正整数。
并且,相邻的两个级别间的比例是个固定值。
也就是说:所有级别的奖金数构成了一个等比数列。比如:
16,24,36,54
其等比值为:3/2

现在,我们随机调查了一些获奖者的奖金数。
请你据此推算可能的最大的等比值。

输入格式:
第一行为数字N(1<N<100),表示接下的一行包含N个正整数
第二行N个正整数Xi(Xi<1 000 000 000 000),用空格分开。每个整数表示调查到的某人的奖金数额

要求输出:
一个形如A/B的分数,要求A、B互质。表示可能的最大比例系数

测试数据保证了输入格式正确,并且最大比例是存在的。

例如,
输入:
3
1250 200 32

程序应该输出:
25/4

再例如,输入:
4
3125 32 32 200

程序应该输出:
5/2

再例如,输入:
3
549755813888 524288 2

程序应该输出:
4/1

资源约定:
峰值内存消耗 < 256M
CPU消耗 < 3000ms

我的思路

  • 本题解析:所有奖金数构成一个等比数列,那么随机选取的某部分奖金数之间满足()^k^的关系,q为公比,k为平方数。
  • 思路说明:
  1. 选取的部分奖金先排序,然后将部分奖金数中所有相邻两个数A、B(A>B)两两分组,并计算对应的商 S = A/B = ()^k^。
  2. 求得k,并将()^k^代入计算,若不存在所有的S均能由(()^k^)^n^表示,则更新k(利用公约数的更新方式)
  3. 最后输出 S ,即为该算法的答案。
  • 公约数更新方式说明:求得的每对A/B = Si,i = 1 - (N-1),比如S1 = 625/16,S2 = 125/8,他们的最大比例这样求,625/16 = (5/2)^4^,125/8 = (5/2)^3^,所以他们的最大比例等于4、3的最大公约数,即(5/2)^1^。

算法展示

个人实现(答案有误)

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long LL; LL N,in[101];//选取奖金总数
LL mons[101],A,B,cnt;//mons:随机选取的奖金数,A:除数,B:被除数,cnt:辅助变量。
struct Gc{
LL A,B;
Gc(LL _A,LL _B):A(_A),B(_B)//约分
{
LL _gcd = maxDiv(A,B);//求最大公约数
A/=_gcd;
B/=_gcd;
}
LL maxDiv(LL A,LL B)//最大公约数求解
{
if(B==0)return A;
return maxDiv(B,A%B);
}
};
vector<Gc> gcs; //求最大公约数
LL comDiv(LL a,LL b)//q对应的不同比率之间的最大公约数
{
if(b==0) return a;
return comDiv(b,a%b);
} //求公比平方数
LL powcnt(LL a)
{
for(LL i =40;i>0;i--)//求得公约数
{
if(pow(gcs[0].A,1.0/i)!=-1)return i;
}
return -1;
}
int main() {
//输入规模
cin>>N;
for(LL i = 0;i< N;i++)
{
cin>>in[i];
} //升序排序
sort(in,in+N);
if(N==2)
{
cout<<in[1]<<"/"<<in[0]<<endl;
return 0;
}
// 存入vector
for(LL i=0;i<N-1;i++)
{
if(in[i]!=in[i+1])gcs.push_back(Gc(in[i+1],in[i])); //添加每组数据
} //利用A,B最大公约数k求解
LL div = powcnt(gcs[0].A);
A = pow(gcs[0].A,1.0/div),B =pow(gcs[0].B,1.0/div);//记录最小数 for(LL j= 0;j<gcs.size();j++)//比较公比平方数
{
LL cnt = powcnt(gcs[j].A);
LL com = comDiv(div,cnt);
if(div>com)div = com;
if(div==1)break;
} cout<<pow(A,div)<<"/"<<pow(B,div)<<endl;
return 0;
}

  

网上借鉴:https://blog.csdn.net/lbperfe...

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#include<stack>
#include<vector>
#include<cmath>
#define MAX 100005
typedef long long ll;
using namespace std; ll a[105]; struct node
{
ll x,y;
}p[105];
bool cmp(node xx,node yy)
{
return xx.x<yy.x;
}
int main()
{
int n;
cin>>n;
for(int t=0;t<n;t++)
{
scanf("%lld",&a[t]);
}
sort(a,a+n);
ll s1;
ll x,y;
int cnt=0;
for(int t=n-1;t>=1;t--)
{
if(a[t]!=a[t-1])
{
s1=__gcd(a[t],a[t-1]);
p[cnt].x=a[t]/s1;
p[cnt++].y=a[t-1]/s1;
}
}
sort(p,p+cnt,cmp);
ll minn=p[0].x;
x=p[0].x;
y=p[0].y;
for(int t=0;t<cnt-1;t++)
{
if((p[t+1].x/p[t].x)<minn&&p[t+1].x/p[t].x!=1)
{
x=p[t+1].x/p[t].x;
y=p[t+1].y/p[t].y;
}
} printf("%lld/%lld",x,y); return 0;
}

  


上文链接:交换瓶子 标记+归位【蓝桥真题】(c++)

 

最大比例 公约数复用 【蓝桥真题】 (c++)的更多相关文章

  1. 第四届蓝桥杯 c/c++真题

    第四届蓝桥杯 c/c++真题 <1>高斯日记 问题 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们 ...

  2. 2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告

    2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告 勘误1:第6题第4个 if最后一个条件粗心写错了,答案应为1580. 条件应为abs(a[3]-a[7])!=1,宝宝心理苦啊.!感谢zzh ...

  3. 第三届蓝桥杯 c/c++真题

    第三届蓝桥杯真题 c/c++ 以下题目我自己也并不是所有的题目都是一次性就能做对或是有结题思路的.有些题目也是经过查证网上相关的资料或是参考了别人的代码和解题思路才做出来的.总的来看,这份题目考了很多 ...

  4. 蓝桥杯java历年真题及答案整理1~20.md

    蓝桥杯java历年真题及答案整理(闭关一个月,呕心沥血整理出来的) 1 算法是这样的,如果给定N个不同字符,将这N个字符全排列,最终的结果将会是N!种.如:给定 A.B.C三个不同的字符,则结果为:A ...

  5. 【蓝桥杯真题】地宫取宝(搜索->记忆化搜索详解)

    链接 [蓝桥杯][2014年第五届真题]地宫取宝 题目描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被 ...

  6. 蓝桥杯Java真题解析

    上个月参加蓝桥杯省赛拿了个省一,自从比赛完之后就一直没怎么写代码了,还有一个多月就要国赛了,从现在开始准备下国赛,但是我也不想学什么算法,而且我还在准备考研,所以就打算只做下历年的真题,争取国赛拿个国 ...

  7. 算法笔记_212:第七届蓝桥杯软件类决赛真题(Java语言B组)

    目录 1 愤怒小鸟 2 反幻方 3 打靶 4 路径之谜 5 碱基 6 圆圈舞 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 愤怒小鸟 愤怒小鸟 X星球愤怒的小鸟喜欢撞火车! 一根平直的铁轨上两火车 ...

  8. 第九届蓝桥杯JavaC组决(国)赛真题

    1:年龄问题 s夫人一向很神秘.这会儿有人问起她的年龄,她想了想说: "20年前,我丈夫的年龄刚好是我的2倍,而现在他的年龄刚好是我的1.5倍". 你能算出s夫人现在的年龄吗? 这 ...

  9. 第十届蓝桥杯JavaB组省赛真题

    试题 A: 组队 本题总分:5 分 [问题描述] 作为篮球队教练,你需要从以下名单中选出 1 号位至 5 号位各一名球员, 组成球队的首发阵容. 每位球员担任 1 号位至 5 号位时的评分如下表所示. ...

随机推荐

  1. JavaScript五子棋第二版

      这是博主做的一个移动端五子棋小游戏,请使用手机体验.由于希望能有迭代开发的感觉,所以暂时只支持双人对战且无其他提示及对战界面,只有胜利提示,悔棋.对战双方显示.人机对战.集成TS(用于学习).和局 ...

  2. 原理解密 → Spring AOP 实现动态数据源(读写分离),底层原理是什么

    开心一刻 女孩睡醒玩手机,收到男孩发来一条信息:我要去跟我喜欢的人表白了! 女孩的心猛的一痛,回了条信息:去吧,祝你好运! 男孩回了句:但是我没有勇气说不来,怕被打! 女孩:没事的,我相信你!此时女孩 ...

  3. Wirte-up:攻防世界Web解题过程新手区01-06

    文章更新于:2020-02-18 说明:为了标识图片边界,有些图片加了红线以增强观感. 注1: web 环境搭建参见: Windows&linux使用集成环境搭建 web 服务器 注2:DVW ...

  4. django-rest-framework权限验证

    django-rest-framework权限验证 在项目根目录下新建utils的文件 新建permissions.py from rest_framework.permissions import ...

  5. Windows恢复分区管控命令reagentc

    reagentc命令可以实现Windows恢复分区的开关,创建.删除,状态查看. 可以只管确定当前系统恢复分区所在位置,便于删除多余的恢复分区.

  6. docker+nginx 微信支付回调

    制作微信支付发现回调有问题: docker-compose中接口要映射对应地址 然后再进行访问

  7. Mac 系统root

    没错,你没看错,就是root mac系统安装件的时候,你有没有遇到过这种情况 总之,就是安装不上软件,肿么办? 网上解觉办法是: 进入系统偏好设置,设置为允许任何人,可是进去后这样: 别着急,打开命令 ...

  8. Golang Web入门(1):自顶向下理解Http服务器

    摘要 由于Golang优秀的并发处理,很多公司使用Golang编写微服务.对于Golang来说,只需要短短几行代码就可以实现一个简单的Http服务器.加上Golang的协程,这个服务器可以拥有极高的性 ...

  9. 06-jmeter参数化(函数对话框使用)

    概念: 1.变量命名的规则:字母.下划线开头,可包含数字,严格区分大小写 2.配置元件:用户定义的变量-------值是不变化的 用户命名的参数--------可以动态获取的并传参的 jmeter函数 ...

  10. GO中的channel使用小结

    go关键字可以用来开启一个goroutine(协程))进行任务处理,而多个任务之间如果需要通信,就需要用到channel了. func testSimple(){ intChan := make(ch ...