Project Euler 22

这题真拿c写的话……真是好……


可以自己写快排,练练指针;

可以自己写文件读入,练练字符串文件输入;

……;


可是以上两个我都不会……

擦……

于是……

果断无耻的python了……

直接上代码……

话说这里借鉴了一个谁谁谁的enumerate的用法~

嗯……不难~


def calculate_name_score(name, n):
	name_worth = sum(ord(letter)-64 for letter in name);
	return name_worth*n

def main():
	name_string = open("names.txt", "r").read();
	name_list = [name.strip('"') for name in name_string.split(',')]
	name_list.sort()
	print(sum(calculate_name_score(name, index+1) for index, name in enumerate(name_list)))

if "__name__" == "__main__":
	main()



加上一个据作者本人说超快的……什么……

C and C++ combined, slightly under 30 ms. It's actually easy to read the input if you know how, then use STL sort:

#include <stdio.h>
#include <string>
#include <vector>

using namespace std;

vector<string> nm;

int main () {
    FILE * f = fopen ("names.txt", "r");
    nm.clear ();
    while (not feof(f)) {
        char str[100];
        fscanf (f, "\"%[a-zA-Z]\",", str);
        nm.push_back (string (str));
    };
    sort (nm.begin (), nm.end ());
    long long int score = 0;
    for (int i = 0; i < nm.size (); i ++) {
        long long int sum = 0;
        for (int j = 0; j < nm[i].size (); j ++) {
            sum += nm[i][j] - 'A' + 1;
        };
        score += sum * (i + 1);
    };
    printf ("%I64d\n", score);
    getchar ();
    fclose (f);
};

竟然是斯洛伐克的……嘻嘻……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值