45 votes

Projet Euler - Problème 8 - Aide à la compréhension des besoins

Je suis en train de travailler à travers les problèmes sur le projet Euler et je ne suis pas certain si ma compréhension de la question est correcte.

Problème 8 est comme suit:

Trouver le plus grand produit de cinq années consécutives de chiffres dans les 1000 chiffres.

J'ai pris ce de la manière suivante:

J'ai besoin de trouver toutes les cinq numéros consécutifs dans les 1000 chiffres du numéro de téléphone, puis les ajouter pour obtenir le total. Je suis en supposant que la taille des caractères peut être de tout ie 1,2,3 ou 12,13,14 ou 123,124,124 ou 1234,1235,1236 etc.

Est ma compréhension de ce correct ou ai-je mal compris la question.

Merci

PS. Veuillez ne pas fournir un code ou la solution, que j'ai besoin pour résoudre moi-même.

Merci à tous. C'était beaucoup plus facile que ce que j'étais en train de lire, merci pour toutes les explications. StackOverflow ne déçoit jamais.

47voto

Eli Bendersky Points 82298

Le numéro est:

73167176531330624919225119674426574742355349194934 96983520312774506326239578318016984801869478851843 85861560789112949495459501737958331952853208805511 12540698747158523863050715693290963295227443043557 66896648950445244523161731856403098711121722383113 62229893423380308135336276614282806444486645238749 30358907296290491560440772390713810515859307960866 70172427121883998797908792274921901699720888093776 65727333001053367881220235421809751254540594752243 52584907711670556013604839586446706324415722155397 53697817977846174064955149290862569321978468622482 83972241375657056057490261407972968652414535100474 82166370484403199890008895243450658541227588666881 16427171479924442928230863465674813919123162824586 17866458359124566529476545682848912883142607690042 24219022671055626321111109370544217506941658960408 07198403850962455444362981230987879927244284909188 84580156166097919133875499200524063689912560717606 05886116467109405077541002256983155200055935729725 71636269561882670428252483600823257530420752963450

  • Les cinq premiers chiffres consécutifs sont: 73167. Leur produit est 7*3*1*6*7=882
  • Les cinq prochaines chiffres sont les suivants: 31671. Leur produit est 3*1*6*7*1=126
  • Les cinq prochaines chiffres sont les suivants: 16717. Leur produit est 1*6*7*1*7=294

Et ainsi de suite. Notez le chevauchement. Maintenant, trouver les cinq chiffres consécutifs dont le produit est maximale sur l'ensemble de 1000 chiffres.

6voto

Arkaaito Points 4392

Un chiffre est un simple 0-9 dans la chaîne représentant le nombre. Donc, le numéro 12345 a 5 chiffres. 1234554321 a 10 chiffres.

Le produit est le total multiplicatif, pas le total ajouté. Donc le produit de 3, 5 et 7 est 105.

Une façon (quelque peu maladroite) de reformuler la question serait:

Pour un nombre de 1000 chiffres, sélectionnez-en 5 chiffres consécutifs qui, pris individuellement et multipliés, donnent le résultat le plus grand.

2voto

Cinq chiffres simples. 1, 5, 8 ... tout ce qui apparaît dans le grand nombre, tous dans une rangée. Donc, si un morceau indique "... 47946285 ...", vous pouvez utiliser "47946", "79462", "94628", "46285", etc.

-1voto

Seule l’improvisation dans ma solution consiste à éviter les calculs inutiles en regardant vers l’avenir.

 package com.euler;

public class Euler8 {
    public static void main(String[] ar) throws Exception {
        String s = 
                "73167176531330624919225119674426574742355349194934" + 
                "96983520312774506326239578318016984801869478851843" + 
                "85861560789112949495459501737958331952853208805511" + 
                "12540698747158523863050715693290963295227443043557" + 
                "66896648950445244523161731856403098711121722383113" + 
                "62229893423380308135336276614282806444486645238749" + 
                "30358907296290491560440772390713810515859307960866" + 
                "70172427121883998797908792274921901699720888093776" + 
                "65727333001053367881220235421809751254540594752243" + 
                "52584907711670556013604839586446706324415722155397" + 
                "53697817977846174064955149290862569321978468622482" + 
                "83972241375657056057490261407972968652414535100474" + 
                "82166370484403199890008895243450658541227588666881" + 
                "16427171479924442928230863465674813919123162824586" + 
                "17866458359124566529476545682848912883142607690042" + 
                "24219022671055626321111109370544217506941658960408" + 
                "07198403850962455444362981230987879927244284909188" + 
                "84580156166097919133875499200524063689912560717606" + 
                "05886116467109405077541002256983155200055935729725" + 
                "71636269561882670428252483600823257530420752963450" ;
        Integer[] tokens = new Integer[s.length()];
        for (int i = 0; i < s.length(); i++) {
            tokens[i] = (int) s.charAt(i)-48;
        }

        int prod = 1;
        int[] numberSet = new int[5];
        int prodCounter = 1;
        for (int i=0; i<tokens.length-4; i++) {
            // Look ahead: if they are zeros in next 5 numbers, just jump.
            if ( tokens[i] == 0) {
                i = i+1;
                continue;
            } else if ( tokens[i+1] == 0) {
                i = i+2;                
                continue;
            } else if ( tokens[i+2] == 0) {
                i = i+3;
                continue;
            } else if ( tokens[i+3] == 0) {
                i = i+4;                
                continue;                           
            } else if ( tokens[i+4] == 0) {
                i = i+5;                
                continue;               
            }           
            int localProd = tokens[i] * tokens[i+1] * tokens[i+2] * tokens[i+3] * tokens[i+4];
            System.out.println("" + (prodCounter++) + ")" + tokens[i] + "*" + tokens[i+1] + "*" + tokens[i+2] + "*" + tokens[i+3] + "*" + tokens[i+4] + " = " + localProd);
            if (localProd > prod) {
                prod = localProd;
                numberSet[0] = tokens[i];
                numberSet[1] = tokens[i+1];
                numberSet[2] = tokens[i+2];
                numberSet[3] = tokens[i+3];
                numberSet[4] = tokens[i+4];
            }
        }
        System.out.println("Largest Prod = " + prod  + " By: (" + numberSet[0] + " , " + numberSet[1] + " ,  " + numberSet[2] + " , " + numberSet[3] + " , " + numberSet[4] + ")");
    }
}
 

-1voto

nikhil Points 15

Vous obtiendrez: Numéros: 99879 Produit: 40824

 $no = "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450";
$x = 0;
$a = 0;
$max = 0;
while($a != 63450){
    $a = substr($no, $x, 5);
    $prod = substr($a, 0, 1) * substr($a, 1, 1) * substr($a, 2, 1)* substr($a, 3, 1) * substr($a, 4, 1);
    if($prod >= $max){
        $max = $prod;
        $theno = $a;
    }
    $x++;
}
echo 'Numbers: '.$theno.'<br>';
echo 'Product: '.$max;
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X