Project Euler (3)

本次记录的题目是:6, 17, 18, 19, 22, 40, 42, 49, 52, 67。

6.

Mathematica:
    res = 2^1000;
    res = ToString[res];
    chars = Characters[res];
    sum = 0 ;
    For[i = 1, i <= StringLength[res], i++,
      sum += ToExpression[chars[[i]]]];
    Print[sum];

17.

C++:
#include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
    const char * last[] = {"","one","two","three","four","five","six","seven","eight","nine"};
    const char * mid_special[] = {"ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"};
    const char * mid[] = {"","","twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"};
    int length = 0;
    for (int i = 1; i < 1000; i++) {
        bool mid_special_mark = true;
        int t = i;
        if (t < 10)
            length += strlen(last[t%10]);
        t %= 100;
        if (t >= 10 && t < 20) {
            length += strlen(mid_special[t%10]);
            mid_special_mark = false;
        }
        t = i;
        if (t < 20) continue;
        int digit = 0;
        do {
            if (digit == 0) {
                if (mid_special_mark){
                    length += strlen(last[t%10]);
                }
            } else if (digit == 1) {
                if (mid_special_mark) {
                    length += strlen(mid[t%10]);
                }
            } else {
                length += strlen(last[t%10]) + 7;
                if (i % 100 != 0) length += 3;
            }
            t/=10;
            digit++;
        } while (t != 0);
    }
    printf("%dn",length + 11);
}

18.

C++:
#include <iostream>
using namespace std;
int main(int argc, const char * argv[]){
    int n,i,j;
    scanf("%d",&n);
    int a[5050];
    for(i=0;i<n;i++)
        for(j=0;j<=i;j++)
            scanf("%d",a+i*(i+1)/2+j);
    for(int row = n-2; row >= 0; row--){
        for(int pos = 0; pos<=row; pos++){
            int left = (row+2)*(row+1)/2+pos;
            int right = left+1;
            if(a[left] > a[right])
                a[row*(row+1)/2+pos]+=a[left];
            else
                a[row*(row+1)/2+pos]+=a[right];
        }
    }
    printf("%d",a[0]);
    return 0;
}

19.

C++:
#include <iostream>
using namespace std;
int main(int argc, const char * argv[]){
    // 1901.1.1 is day 0
    int result = 0;
    int day_past = 1;
    int day_of_month[] = {31,-1,31,30,31,30,31,31,30,31,30,31};
    for (int i = 1901; i < 2001; i++)
        for (int m = 0; m < 12; m++) {
            if (day_past % 7 == 6) result++;
            if (m == 1)
                if ((i % 4 == 0) & (i % 100 != 0 || i % 400 == 0)) day_past += 29;
                else day_past += 28;
            else day_past += day_of_month[m];
    }
    printf("%dn",result);
}

22.

Perl:
#!/usr/bin/env perl
 
use strict;
use warnings;
use utf8;
use 5.010;
 
open FH, "p022_names.txt" or warn $!;
open TP, ">tmp.txt";
my $names = <FH>;
$names =~ s/"//g;
$names =~ s/,/n/g;
print TP $names;
system("sort tmp.txt > tmp1.txt");
open LIST, "tmp1.txt";
my $score = 0;
my $number = 1;
while (<LIST>){
    my $current_score = 0;
    for(my $i = 0; $i < length($_) - 1; $i++){
        $current_score += (ord(substr $_,$i,1) - 64);
    }
    $score += $current_score * $number;
    $current_score = 0;
    $number++;
}
print $score;
close FH;
close TP;
system("rm -f tmp.txt tmp1.txt");

40.

Perl:
#!/usr/bin/env perl
 
use strict;
use warnings;
use utf8;
use 5.010;
 
open FH, ">tmp.txt";
for (my $i = 1; $i < 188000; $i++) {
    print FH $i;
}
close FH;
open FH, "<tmp.txt";
my $text = <FH>;
my $res = 1;
for (my $index = 1; $index <= 1000000; $index*=10){
    $res *= ord(substr($text, $index - 1,1)) - 48;
}
print $res,"n";
close FH;
system("rm -f tmp.txt");
 

42.

Perl:
#!/usr/bin/env perl
 
use strict;
use warnings;
use utf8;
use 5.010;
 
sub is_triangle{
    my $number = shift;
    $number = int($number);
    $number *= 2;
    my $n1 = int(sqrt $number) + 1;
    for (;$n1 >= 1; $n1--) {
        if ($n1 * ($n1 - 1) == $number) {
            return 1;
        }
    }
    return 0;
}
 
open FH, "p042_words.txt" or warn $!;
open TP, ">tmp.txt";
my $names = <FH>;
$names =~ s/"//g;
$names =~ s/,/n/g;
print TP $names;
system("sort tmp.txt > tmp1.txt");
open LIST, "tmp1.txt";
my $count = 0;
while (<LIST>){
    my $current = 0;
    for(my $i = 0; $i < length($_) - 1; $i++) {
        $current += (ord(substr $_,$i,1) - 64);
    }
    if (is_triangle($current) == 1) {
        $count++;
    }
    $current = 0;
}
print $count;
close FH;
close TP;
system("rm -f tmp.txt tmp1.txt");

49.

C++:
#include <iostream>
using namespace std;
int four_digit_primes[] = {1009, 1013, 1019, 1021, 1031, 1033, 1039, 1049, 1051, 1061, 1063,
    1069, 1087, 1091, 1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151,
    1153, 1163, 1171, 1181, 1187, 1193, 1201, 1213, 1217, 1223, 1229,
    1231, 1237, 1249, 1259, 1277, 1279, 1283, 1289, 1291, 1297, 1301,
    1303, 1307, 1319, 1321, 1327, 1361, 1367, 1373, 1381, 1399, 1409,
    1423, 1427, 1429, 1433, 1439, 1447, 1451, 1453, 1459, 1471, 1481,
    1483, 1487, 1489, 1493, 1499, 1511, 1523, 1531, 1543, 1549, 1553,
    1559, 1567, 1571, 1579, 1583, 1597, 1601, 1607, 1609, 1613, 1619,
    1621, 1627, 1637, 1657, 1663, 1667, 1669, 1693, 1697, 1699, 1709,
    1721, 1723, 1733, 1741, 1747, 1753, 1759, 1777, 1783, 1787, 1789,
    1801, 1811, 1823, 1831, 1847, 1861, 1867, 1871, 1873, 1877, 1879,
    1889, 1901, 1907, 1913, 1931, 1933, 1949, 1951, 1973, 1979, 1987,
    1993, 1997, 1999, 2003, 2011, 2017, 2027, 2029, 2039, 2053, 2063,
    2069, 2081, 2083, 2087, 2089, 2099, 2111, 2113, 2129, 2131, 2137,
    2141, 2143, 2153, 2161, 2179, 2203, 2207, 2213, 2221, 2237, 2239,
    2243, 2251, 2267, 2269, 2273, 2281, 2287, 2293, 2297, 2309, 2311
    2333, 2339, 2341, 2347, 2351, 2357, 2371, 2377, 2381, 2383, 2389
    2393, 2399, 2411, 2417, 2423, 2437, 2441, 2447, 2459, 2467, 2473
    2477, 2503, 2521, 2531, 2539, 2543, 2549, 2551, 2557, 2579, 2591
    2593, 2609, 2617, 2621, 2633, 2647, 2657, 2659, 2663, 2671, 2677
    2683, 2687, 2689, 2693, 2699, 2707, 2711, 2713, 2719, 2729, 2731
    2741, 2749, 2753, 2767, 2777, 2789, 2791, 2797, 2801, 2803, 2819
    2833, 2837, 2843, 2851, 2857, 2861, 2879, 2887, 2897, 2903, 2909
    2917, 2927, 2939, 2953, 2957, 2963, 2969, 2971, 2999, 3001, 3011
    3019, 3023, 3037, 3041, 3049, 3061, 3067, 3079, 3083, 3089, 3109
    3119, 3121, 3137, 3163, 3167, 3169, 3181, 3187, 3191, 3203, 3209
    3217, 3221, 3229, 3251, 3253, 3257, 3259, 3271, 3299, 3301, 3307
    3313, 3319, 3323, 3329, 3331, 3343, 3347, 3359, 3361, 3371, 3373
    3389, 3391, 3407, 3413, 3433, 3449, 3457, 3461, 3463, 3467, 3469
    3491, 3499, 3511, 3517, 3527, 3529, 3533, 3539, 3541, 3547, 3557
    3559, 3571, 3581, 3583, 3593, 3607, 3613, 3617, 3623, 3631, 3637
    3643, 3659, 3671, 3673, 3677, 3691, 3697, 3701, 3709, 3719, 3727
    3733, 3739, 3761, 3767, 3769, 3779, 3793, 3797, 3803, 3821, 3823
    3833, 3847, 3851, 3853, 3863, 3877, 3881, 3889, 3907, 3911, 3917
    3919, 3923, 3929, 3931, 3943, 3947, 3967, 3989, 4001, 4003, 4007
    4013, 4019, 4021, 4027, 4049, 4051, 4057, 4073, 4079, 4091, 4093
    4099, 4111, 4127, 4129, 4133, 4139, 4153, 4157, 4159, 4177, 4201
    4211, 4217, 4219, 4229, 4231, 4241, 4243, 4253, 4259, 4261, 4271
    4273, 4283, 4289, 4297, 4327, 4337, 4339, 4349, 4357, 4363, 4373
    4391, 4397, 4409, 4421, 4423, 4441, 4447, 4451, 4457, 4463, 4481
    4483, 4493, 4507, 4513, 4517, 4519, 4523, 4547, 4549, 4561, 4567
    4583, 4591, 4597, 4603, 4621, 4637, 4639, 4643, 4649, 4651, 4657
    4663, 4673, 4679, 4691, 4703, 4721, 4723, 4729, 4733, 4751, 4759
    4783, 4787, 4789, 4793, 4799, 4801, 4813, 4817, 4831, 4861, 4871
    4877, 4889, 4903, 4909, 4919, 4931, 4933, 4937, 4943, 4951, 4957
    4967, 4969, 4973, 4987, 4993, 4999, 5003, 5009, 5011, 5021, 5023
    5039, 5051, 5059, 5077, 5081, 5087, 5099, 5101, 5107, 5113, 5119
    5147, 5153, 5167, 5171, 5179, 5189, 5197, 5209, 5227, 5231, 5233
    5237, 5261, 5273, 5279, 5281, 5297, 5303, 5309, 5323, 5333, 5347
    5351, 5381, 5387, 5393, 5399, 5407, 5413, 5417, 5419, 5431, 5437
    5441, 5443, 5449, 5471, 5477, 5479, 5483, 5501, 5503, 5507, 5519
    5521, 5527, 5531, 5557, 5563, 5569, 5573, 5581, 5591, 5623, 5639
    5641, 5647, 5651, 5653, 5657, 5659, 5669, 5683, 5689, 5693, 5701
    5711, 5717, 5737, 5741, 5743, 5749, 5779, 5783, 5791, 5801, 5807
    5813, 5821, 5827, 5839, 5843, 5849, 5851, 5857, 5861, 5867, 5869
    5879, 5881, 5897, 5903, 5923, 5927, 5939, 5953, 5981, 5987, 6007
    6011, 6029, 6037, 6043, 6047, 6053, 6067, 6073, 6079, 6089, 6091
    6101, 6113, 6121, 6131, 6133, 6143, 6151, 6163, 6173, 6197, 6199
    6203, 6211, 6217, 6221, 6229, 6247, 6257, 6263, 6269, 6271, 6277
    6287, 6299, 6301, 6311, 6317, 6323, 6329, 6337, 6343, 6353, 6359
    6361, 6367, 6373, 6379, 6389, 6397, 6421, 6427, 6449, 6451, 6469
    6473, 6481, 6491, 6521, 6529, 6547, 6551, 6553, 6563, 6569, 6571
    6577, 6581, 6599, 6607, 6619, 6637, 6653, 6659, 6661, 6673, 6679
    6689, 6691, 6701, 6703, 6709, 6719, 6733, 6737, 6761, 6763, 6779
    6781, 6791, 6793, 6803, 6823, 6827, 6829, 6833, 6841, 6857, 6863
    6869, 6871, 6883, 6899, 6907, 6911, 6917, 6947, 6949, 6959, 6961
    6967, 6971, 6977, 6983, 6991, 6997, 7001, 7013, 7019, 7027, 7039
    7043, 7057, 7069, 7079, 7103, 7109, 7121, 7127, 7129, 7151, 7159
    7177, 7187, 7193, 7207, 7211, 7213, 7219, 7229, 7237, 7243, 7247
    7253, 7283, 7297, 7307, 7309, 7321, 7331, 7333, 7349, 7351, 7369
    7393, 7411, 7417, 7433, 7451, 7457, 7459, 7477, 7481, 7487, 7489
    7499, 7507, 7517, 7523, 7529, 7537, 7541, 7547, 7549, 7559, 7561
    7573, 7577, 7583, 7589, 7591, 7603, 7607, 7621, 7639, 7643, 7649
    7669, 7673, 7681, 7687, 7691, 7699, 7703, 7717, 7723, 7727, 7741
    7753, 7757, 7759, 7789, 7793, 7817, 7823, 7829, 7841, 7853, 7867
    7873, 7877, 7879, 7883, 7901, 7907, 7919, 7927, 7933, 7937, 7949
    7951, 7963, 7993, 8009, 8011, 8017, 8039, 8053, 8059, 8069, 8081
    8087, 8089, 8093, 8101, 8111, 8117, 8123, 8147, 8161, 8167, 8171
    8179, 8191, 8209, 8219, 8221, 8231, 8233, 8237, 8243, 8263, 8269
    8273, 8287, 8291, 8293, 8297, 8311, 8317, 8329, 8353, 8363, 8369
    8377, 8387, 8389, 8419, 8423, 8429, 8431, 8443, 8447, 8461, 8467
    8501, 8513, 8521, 8527, 8537, 8539, 8543, 8563, 8573, 8581, 8597
    8599, 8609, 8623, 8627, 8629, 8641, 8647, 8663, 8669, 8677, 8681
    8689, 8693, 8699, 8707, 8713, 8719, 8731, 8737, 8741, 8747, 8753
    8761, 8779, 8783, 8803, 8807, 8819, 8821, 8831, 8837, 8839, 8849
    8861, 8863, 8867, 8887, 8893, 8923, 8929, 8933, 8941, 8951, 8963
    8969, 8971, 8999, 9001, 9007, 9011, 9013, 9029, 9041, 9043, 9049
    9059, 9067, 9091, 9103, 9109, 9127, 9133, 9137, 9151, 9157, 9161
    9173, 9181, 9187, 9199, 9203, 9209, 9221, 9227, 9239, 9241, 9257
    9277, 9281, 9283, 9293, 9311, 9319, 9323, 9337, 9341, 9343, 9349
    9371, 9377, 9391, 9397, 9403, 9413, 9419, 9421, 9431, 9433, 9437
    9439, 9461, 9463, 9467, 9473, 9479, 9491, 9497, 9511, 9521, 9533
    9539, 9547, 9551, 9587, 9601, 9613, 9619, 9623, 9629, 9631, 9643
    9649, 9661, 9677, 9679, 9689, 9697, 9719, 9721, 9733, 9739, 9743
    9749, 9767, 9769, 9781, 9787, 9791, 9803, 9811, 9817, 9829, 9833
    9839, 9851, 9857, 9859, 9871, 9883, 9887, 9901, 9907, 9923, 9929
    9931, 9941, 9949, 9967, 9973};
 

bool isPermutations(int number1,int number2,int number3){
    int flag1[10] = {0};
    int flag2[10] = {0};
    int flag3[10] = {0};
    do{
        flag1[number1%(unsigned)10]++;
        number1/=10;
    } while(number1);
    do{
        flag2[number2%(unsigned)10]++;
        number2/=10;
    } while(number2);
    do{
        flag3[number3%(unsigned)10]++;
        number3/=10;
    } while(number3);
    for (int i = 0; i < 10; i++) {
        if (flag1[i] != flag2[i]) {
            return false;
        } else if (flag1[i] != flag3[i]){
            return false;
        }
    }
    return true;
}


int main(int argc, const char * argv[]){
    for (int i = 0; i < 1058;i++){
        for (int t = i + 1; t < 1059; t++) {
            int step = four_digit_primes[t] - four_digit_primes[i];
            for (int p = t + 1; p < 1060; p++) {
                if (four_digit_primes[p] - four_digit_primes[t] == step) {
                    if (isPermutations(four_digit_primes[i],four_digit_primes[t],four_digit_primes[p])) {
                        printf("%d %d %dn",four_digit_primes[i],four_digit_primes[t],four_digit_primes[p]);
                    }
                }
            }
        }
    }
}

52.

Python:
#coding:utf-8
 
import sys
 
def digits(n):
    return sorted(list(str(n)))
for n in xrange(1,9223372036854775807):
    p = digits(n)
    if p == digits(2*n):
        if p == digits(3*n):
            if p == digits(4*n):
                if p == digits(5*n):
                    if p == digits(6*n):
                        print n
                        sys.exit()

67.

C++:
#include <iostream>
using namespace std;
int main(int argc, const char * argv[]){
    int n,i,j;
    scanf("%d",&n);
    int a[5050];
    for(i=0;i<n;i++)
        for(j=0;j<=i;j++)
            scanf("%d",a+i*(i+1)/2+j);
    for(int row = n-2; row >= 0; row--){
        for(int pos = 0; pos<=row; pos++){
            int left = (row+2)*(row+1)/2+pos;
            int right = left+1;
            if(a[left] > a[right])
                a[row*(row+1)/2+pos]+=a[left];
            else
                a[row*(row+1)/2+pos]+=a[right];
        }
    }
    printf("%d",a[0]);
    return 0;
}

Leave a Reply

Your email address will not be published. Required fields are marked *

eight + 9 =