鱼C论坛

 找回密码
 立即注册
查看: 2291|回复: 4

题目99:文件中哪一个 基/指数 对具有最大的数值?

[复制链接]
发表于 2016-8-12 01:24:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Largest exponential

Comparing two numbers written in index form like QQ20160812-1@2x.png is not difficult, as any calculator would confirm that QQ20160812-2@2x.png .

However, confirming that QQ20160812-3@2x.png would be much more difficult, as both numbers contain over three million digits.

Using base_exp.txt (right click and 'Save Link/Target As...'), a 22K text file containing one thousand lines with a base/exponent pair on each line, determine which line number has the greatest numerical value.

NOTE: The first two lines in the file represent the numbers in the example given above.


题目:

比较两个写成上标形式的数并不困难,比如 QQ20160812-4@2x.png ,因为任何计算机都会告诉你 QQ20160812-2@2x.png

但是,要确实 QQ20160812-3@2x.png 就要困难很多,因为这两个数都包含超过三百万位数。

p099_base_exp.txt (13.56 KB, 下载次数: 16) 包含一千行内容,每一行都包含一个基和一个指数,找出哪一行具有最大的值。

注意:前两行的数字就是上面给出的例子。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-10-21 12:59:53 | 显示全部楼层
这题只要学过对数的同学就很容易解决了,用对数比较轻松+愉快!
709
[Finished in 0.1s]

代码中间的原始数据不贴全了,自己补上即可。
data = '''519432,525806
632382,518061
78864,613712
466580,530130
。。。。。。
。。。。。。
。。。。。。
325361,545187
172115,573985
13846,725685'''

import math
data = str(data)
data = data.replace(chr(10),',').split(',')
data = [int(i) for i in data]
maxi, maxn = 0, 0
for i in range(1000):
        num = data[i*2+1]*math.log(data[i*2])
        if num > maxn:
                maxn, maxi = num, i
print maxi+1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-22 09:58:06 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2020-6-1 13:26 编辑

感谢楼上提供的思路
fstream 慢死了
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>


int main() {
    unsigned short line, maxline;
    unsigned int a, b;
    double n, maxn = 0.0L;
    FILE* file = fopen("p099_base_exp.txt", "r");

    for (line = 1; line <= 1000; line++) {
        fscanf(file, "%d,%d", &a, &b);
        n = log(a) * b;

        if (n > maxn) {
            maxn = n;
            maxline = line;
        }
    }

    fclose(file);
    printf("%d", maxline);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-25 19:04:08 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2021-1-8 20:08 编辑
from math import log
maxn = 0.0
maxline = 0


for line, string in enumerate(open("p099_base_exp.txt"), 1):
    a, b = string.split(',', 1)
    n = log(int(a)) * int(b)

    if n > maxn:
        maxn = n
        maxline = line


print(maxline)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-28 16:53:06 | 显示全部楼层
709

Process returned 0 (0x0)   execution time : 0.024 s
Press any key to continue.
取对数,没啥好说的
#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;

const int M = 1000;

int main(){
  freopen("i.in","r",stdin);
  double mx = 0;
  int ans;

  for (int r = 1;r <= M;r++){
    int a,b;
    scanf("%d,%d",&a,&b);
    double t = b*log(a);

    if (t > mx) {mx = t;  ans = r;}
  }
  cout << ans << endl;
  return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 21:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表