24小时热门版块排行榜    

Znn3bq.jpeg
查看: 1818  |  回复: 13
本帖产生 2 个 程序强帖 ,点击这里进行查看

holmescn

金虫 (正式写手)

[交流] Euler 工程 第廿二题: 姓的总分 已有5人参与

附件中是一个包含了5前个姓的文件。先把它按字母表排序,然后计算每个姓的值,并乘以这个姓在文件中的序数得到这个姓的分数。
例如,COLIN,它的字母值是:3+15+12+9+14=53,在排序后的列表中,它在第938位,这样COLIN的得分为:53*938=49714
那么这个文件中所有姓的总分是多少?
回复此楼

» 本帖已获得的红花(最新10朵)

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

★ ★ ★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
dubo(金币+1): 谢谢交流 2011-06-05 12:17:18
微尘、梦想(金币+4): 2011-06-06 20:19:45
matlab code
CODE:
%% What is the total of all the name scores in the file?
% For example, when the list is sorted into alphabetical order,
% COLIN, which is worth 3 + 15 + 12 + 9 + 14 = 53, is the 938th name in the list.
% So, COLIN would obtain a score of 938 × 53 = 49714.
function result = euler22()
tic;
fid = fopen('D:\euler\names.txt');
names = fgets(fid); % 读取全部内容到字符串
fclose(fid);

names = strrep(names,'"',''); % 删除"
namelist = regexp(names,',','split'); % 用逗号分隔
sname = sort(namelist); % 排序

result = 0;
for i=1:length(sname) % 循环
    curname = lower(sname{i}); % 全小写
    curname = curname-repmat('a',1,length(curname)); % 与全a作差
    cursum = sum(curname+1); % 求和
    result = result+cursum*i; % 乘顺序计算score,累加
end
toc;
end

结果时间
CODE:
% Elapsed time is 0.307340 seconds.
% ans =
%    871198282

matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
2楼2011-06-05 01:32:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huycwork

金虫 (著名写手)

★ ★ ★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
dubo(金币+1): 谢谢交流 2011-06-05 12:17:28
微尘、梦想(金币+4): 2011-06-06 20:19:54
涉及到文本处理的惯例是Perl:
CODE:
#!/usr/bin/perl
open F, "<", "names.txt";
$f = ;
@ns = sort eval ($f);
foreach(@ns){
    local (*v) = \$_;
    $v += ord($_) - ord('A') + 1 foreach(/(.)/g);
}
unshift @ns, 0;
$s += $_ * $ns[$_] foreach(1..@ns);
print $s;

[ Last edited by huycwork on 2011-6-6 at 09:27 ]
漩涡的中心有一块空地,空空的。
3楼2011-06-05 10:12:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wangww2011

木虫 (著名写手)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
xzhdty(金币+2): 谢谢交流 2011-06-05 14:21:41
余泽成(程序强帖+1): 鼓励交流! 2011-06-18 15:55:16
话说perl版的真是简洁
还是用C写吧,虽然看着挺不爽的
CODE:
#include
#include
#include


#define SIZE 50000

inline int cmp(const void *p1,const void *p2)
{
        return strcmp((char *)p1,(char *)p2);
}

inline int count(const char *p){
        int i=0,res=0;
        while(p[i]!='\0')res+=p[i++]-64;
        return res;
}

long euler22(){
        int i=0,length;
        FILE *fp=fopen("names.txt", "r");
        if(fp == 0) return -1;

        char str[SIZE];
        if (NULL == fgets(str, SIZE, fp)) {
                return -1;
        }
        fclose(fp);

        char *delims="\",";
        char *p=strtok(str,delims);
        char names[6000][15];
        while(p!=NULL){
                strcpy(names[i++],p);
                p=strtok(NULL,delims);
        }
        length=i;
  
        qsort(names,length,sizeof(names[0]),cmp);
  
        long  sum=0;
        for(i=0;i                 sum+=(i+1)*count(names[i]);
      
        return sum;
}



int main(void){

        printf("%ld\n",euler22());
  
        return 0;
}

4楼2011-06-05 13:42:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
jjdg(金币+1): 端午节快乐 2011-06-06 03:21:53
上python
CODE:
#! usr/bin/env python
import string

s = open('names.txt').read()[1:-1].split('","')
s.sort()
print sum([(i+1)*sum([string.ascii_uppercase.index(c)+1 for c in s[i]]) for i in xrange(len(s))])

matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
5楼2011-06-05 17:24:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wangww2011

木虫 (著名写手)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
jjdg(金币+1): 端午节快乐 2011-06-06 03:21:39
引用回帖:
Originally posted by libralibra at 2011-06-05 17:24:10:
上python
CODE:
#! usr/bin/env python
import string

s = open('names.txt').read()[1:-1].split('","')
s.sort()
print sum([(i+1)*sum([string.ascii_uppercase.index(c)+1 for c in s[i]])  


够简洁
CODE:
s = open('names.txt').read()[1:-1].split('","')
s.sort()
print sum([(i+1)*sum([ord(c)-64 for c in s[i]]) for i in xrange(len(s))])

[ Last edited by wangww2011 on 2011-6-5 at 18:52 ]
6楼2011-06-05 18:50:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

金虫 (正式写手)

★ ★
送鲜花一朵
jjdg(金币+1): 端午节快乐 2011-06-06 03:21:14
jjdg(金币+1): 感谢参与 2011-06-06 03:21:23
都写得太好了,我都不敢写了。
7楼2011-06-05 21:25:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huycwork

金虫 (著名写手)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
微尘、梦想(金币+2): 鼓励多交流! 2011-06-06 20:20:23
维持最奇怪语言的地位还真是有压力啊,俺再来三行版:
CODE:
open F, "<", "names.txt";
$s+=++$b*$_ foreach(map{$a=0;$a+=$_ foreach(map{ord($_)-64}(/(.)/g));$a}sort eval);
print $s, "\n";

[ Last edited by huycwork on 2011-6-6 at 13:46 ]
漩涡的中心有一块空地,空空的。
8楼2011-06-06 13:45:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wangww2011

木虫 (著名写手)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
微尘、梦想(金币+2): 鼓励多交流! 2011-06-06 20:20:38
ben_ladeng: 2011-08-02 08:08:03
引用回帖:
Originally posted by huycwork at 2011-06-06 13:45:03:
维持最奇怪语言的地位还真是有压力啊,俺再来三行版:

Perl还是很方便的,有机会学学
CODE:
print sum([(i+1)*sum([ord(c)-64 for c in s]) for i,s in enumerate(sorted(open('names.txt').read()[1:-1].split('","')))])

额 我走极端了

[ Last edited by wangww2011 on 2011-6-6 at 17:34 ]
9楼2011-06-06 17:33:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huycwork

金虫 (著名写手)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
dubo(金币+1): 欢迎讨论 2011-06-07 22:46:57
引用回帖:
Originally posted by wangww2011 at 2011-06-06 17:33:28:
Perl还是很方便的,有机会学学
CODE:
print sum([(i+1)*sum([ord(c)-64 for c in s]) for i,s in enumerate(sorted(open('names.txt').read()[1:-1].split('","')))])

额 我走极端了 ...

单行程序可是perl的拿手戏
CODE:
perl -e '$s+=++$b*$_ foreach(map{$a=0;$a+=$_ foreach(map{ord($_)-64}(/(.)/g));$a}sort eval<>);print $s,\"\n\";' names.txt

不过我很疑惑啊,Perl自带的数据筛子里面居然没有类似sum这样把数组处理成标量的筛子,这种筛子应该很常用才对的。
漩涡的中心有一块空地,空空的。
10楼2011-06-06 22:15:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 holmescn 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 295分求调剂 +6 ?要上岸? 2026-04-17 6/300 2026-04-21 08:18 by Equinoxhua
[考研] 一志愿中科大材料与化工,353分还有调剂学校吗 +11 否极泰来2026 2026-04-15 13/650 2026-04-20 22:31 by Equinoxhua
[考研] 085600材料与化工调剂 5+3 孜孜不倦2002 2026-04-19 6/300 2026-04-20 21:25 by babero
[论文投稿] 有没有接收比较快的sci期刊呀,最好在一个月之内的,研三孩子求毕业 20+4 之护着 2026-04-16 7/350 2026-04-20 15:45 by 豆豆7758
[教师之家] 又一批高校组建人工智能学院 师资行吗 不是骗人吗 +4 yexuqing 2026-04-19 4/200 2026-04-20 14:47 by brantleo
[考研] 337求调剂 +3 jyz04 2026-04-18 3/150 2026-04-20 12:24 by 研可安
[考博] 申博/考博 +4 啃面包的小书虫 2026-04-17 5/250 2026-04-20 10:47 by YuY66
[考研] 求计算机方向调剂 +3 Toffee2 2026-04-16 6/300 2026-04-19 22:37 by ll叶
[考研] 通信工程求调剂!!! +7 zlb770521 2026-04-14 7/350 2026-04-19 20:56 by Equinoxhua
[考研] 294求调剂 +8 淡然654321 2026-04-17 9/450 2026-04-19 19:51 by Equinoxhua
[考研] 304求调剂 +8 castLight 2026-04-16 8/400 2026-04-19 17:14 by 中豫男
[考研] 085404 22408 309分求调剂 +10 lzmk 2026-04-14 11/550 2026-04-19 16:42 by 中豫男
[考研] 求调剂 +6 苦命人。。。 2026-04-18 7/350 2026-04-19 16:27 by 中豫男
[考研] 300求调剂 +12 橙a777 2026-04-15 12/600 2026-04-18 23:51 by 路病情
[考研] 收到复试调剂但是去不了 +8 小蜗牛* 2026-04-16 8/400 2026-04-18 11:15 by zixin2025
[考研] 260求调剂 +4 Zyt1314520.. 2026-04-17 5/250 2026-04-18 08:28 by babysonlkd
[考研] 一志愿华中农业071010,320求调剂 +17 困困困困坤坤 2026-04-14 19/950 2026-04-17 20:08 by 关一盏灯cd
[有机交流] 二苯甲酮酸类衍生物 50+3 小白爱主人 2026-04-17 6/300 2026-04-17 18:47 by kf2781974
[考研] 一志愿沪9,生物学326求调剂 +9 刘墨墨 2026-04-15 9/450 2026-04-16 17:14 by 崔崔崔cccc
[考研] 药学求调剂 +14 喽哈加油 2026-04-14 16/800 2026-04-16 10:15 by beilsong20
信息提示
请填处理意见