Informatică, întrebare adresată de fameoo, 9 ani în urmă

este problema vuli de pe pbinfo #2016, cat de simplu posibil va rog
Enunț
Vuli este un informatician foarte pasionat de triunghiuri și numere cu proprietăți interesante, aceste două pasiuni au dat naștere unui interes complet nou pentru el, triunghiurile de numere. În prezent, Vuli este interesat de triunghiul lui Pascal, mai exact, de numerele din triunghi de pe o anume linie k care sunt fabuloase (în concepția lui Vuli, un număr este fabulos dacă suma cifrelor numărului este un număr prim, sau este egală cu 1). Triunghiul lui Pascal ce generează astfel: P[0][0] = 1, P[i][j] = P[i - 1][j] + P[i - 1][j - 1]. Vuli este perfect capabil să elaboreze singur un algoritm pentru a determina șirul de numere fabuloase de pe linia k, dar acum este prins cu probleme mai complicate, așa că vă roagă pe voi să-l ajutați.

Cerința
Se cere să se afișeze în ordine crescătoare toate numerele fabuloase de pe linia k a triunghiului.

Date de intrare
Se citește din fișierul de intrare vuli.in un număr k ce reprezintă indicele liniei din triunghiului lui Pascal.

Date de ieșire
Se va afișa în fișierul vuli.out, pe prima linie, numerele fabuloase de pe linia k a triunghiului, în ordine crescătoare.

Restricții și precizări
1 ≤ k ≤ 40



Exemplu
vuli.in

5
vuli.out

1 5 10

Răspunsuri la întrebare

Răspuns de boiustef
68

Răspuns:

#include <iostream>

#include <fstream>

using namespace std;

ifstream fin("vuli.in");

ofstream fout("vuli.out");

bool prim(int num)

{

   bool p=1;

   if (num<2) p=0;

   if (num==2) p=1;

   if (num>2)

   {

       if (num%2==0) p=0;

       for (int d=3; d*d<=num; d+=2)

           if (num%d==0) p=0;

   }

   return p;

}

int sumaCif(long long num)

{

   int s=0;

   while (num)

   {

       s+=num%10;

       num/=10;

   }

   return s;

}

long long k, i, j, P[41][41], suma;

int main()

{

   fin >> k;

   for(i = 0 ; i <= k ; i ++)

   {

       P[i][0] = P[i][i] = 1;

       for(j = 1 ; j < i ; j ++)

           P[i][j] = P[i-1][j-1] + P[i-1][j];

   }

   for (j=0; j<=k/2; ++j)

   {

       suma=sumaCif(P[k][j]);

       if (suma==1 || prim(suma))

           fout << P[k][j] << " ";

   }

}

Explicație:

La sigur că sunt alte variante, dar aici nu s-a cerut mare efectivitate...


boiustef: ce anume?
Utilizator anonim: Ce înseamnă bool prim(int num){ }
boiustef: subprogram ce returnează true dacă numărul trimis lui este prim şi false dacă nu e prim
boiustef: true este echivalent cu valoarea 1 şi false cu 0
Utilizator anonim: Adică valori buleane?
SofiPuppy456: Cam asa ceva...
boiustef: cu plăcere. succese!
Alte întrebări interesante