Informatică, întrebare adresată de GabiAlex99, 8 ani în urmă

Cerință

Andreea se ocupă de aranjarea unei săli. De data aceasta trebuie să picteze pe pereți niște modele în formă de romb, însă nu crede că se va descurca decât dacă primește și schița digitalizată. Astfel, ea vă dă înălțimea rombului, iar voi va trebui să îl reprezentați.


Sarcina ta e să formezi un romb (după modelul din exemplu) cu înălțimea de lungime N și laturile formate din *.


Date de intrare

Se citește un singur număr natural N, înălțimea rombului.


Date de ieșire

Se vor afișa N linii, reprezentând "desenul" cerut.


Restricții

3 ≤ N ≤ 100

Se garantează că N este impar

Exemplu

Pentru n = 5 se va afișa

Anexe:

Răspunsuri la întrebare

Răspuns de boiustef
2

Răspuns:

Explicație:

#include <iostream>

using namespace std;

int main()

{

   int n,p=-1, i, j;

   cin>>n;

   for (i=1;i<=n/2+1;++i) {

     for (j=1;j<=n/2+1-i;++j){

       cout<<" ";

     }

     cout<<"*";

     for (j=1;j<=p;++j){

       cout<<" ";

     }

       if (p>0) { cout<<"*";}

       p+=2;cout<<"\n";

   }

   p=n-3;

   for (i=1; i<=n/2; ++i)

   {

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

           cout << " ";

       cout << "*";

        for (j=1;j<p;++j){

       cout<<" ";

     }

       if (p>0) { cout<<"*";}

       p-=2;cout<<"\n";

   }

}


GabiAlex99: Interesanta metoda :D. Intre timp, am gasit o rezolvare foarte eficienta http://prntscr.com/nge6x3
boiustef: uauuu, genială rezolvare... mulţumesc, dar eu nu apucam să gândesc astfel... :))) sunt mai pământean
grigore2018: : )))
GabiAlex99: Stai linistit, nu eu am gasit rezolvarea :))) am gasit-o pe un forum.. (in engleza)
GabiAlex99: Nu eu am rezolvat* voiam sa zic :))
boiustef: am înţeles, doar ai scris că ai găsit..
Răspuns de grigore2018
1

Răspuns pascal :

uses crt;

var

 i, j, n: integer;

begin

 clrscr;

 readln(n);

 for i := 1 to n do  

   if i mod 2 = 1 then

   begin

     for j := 1 to (n - i) div 2 do write(' ');

     for j := 1 to i do write('*');

     writeln;

   end;

 for i := n - 1 downto 1 do  

   if i mod 2 = 1 then

   begin

     for j := 1 to (n - i) div 2 do write(' ');

     for j := 1 to i do write('*');

     writeln;

   end;

 readln;

end.


grigore2018: Alta metoda este:
grigore2018: uses crt;

var
i, j, n, k: byte;

begin
clrscr;
repeat
write('Lungimea diagonalei rombului n=');
readln(n);
until n in [1..23];
clrscr;
writeln('Rombul:');
k := n div 2 + 1;
for i := 1 to n do
begin
for j := 1 to n do
if((i <= k) and (j <= k) and (j > k - i))
or ((i <= k) and (j > k) and (j <= k + i - 1))
or ((i > k) and (j <= k) and (j >= i - k + 1))
or ((i > k) and (j > k) and (j <= n - i + k))
then
write('*') else write(' ');
writeln;
end;
readln
end.
GabiAlex99: Mersi, dar in Pascal nu prea ma pricep :)) doar c++
boiustef: bravo, Grigore, dar dacă îmi permiţi să fac o observaţie....
grigore2018: Unde? :)
boiustef: Fără supărare, dar îţi dau un sfat: Citeşte mai atent enunţul problemei că de altfel rezolvarea nu respectă cerinţa. Chiar la problema aceasta cu rombul,,, Rombul e gol în interior, vezi imaginea.
boiustef: Şi am observat şi la numărarea literelor, cifrelor, vocalelor, consoanelor.. Enunţul spune că se introduc n caractere, după fiecare caracter se tastează Enter, iar tu citeşti ca un şir de caractere. Plus de asta literele sunt mari ale alfabetului englez...
boiustef: E f.b că gândul zboară repede şi caută soluţia, dar stăpâneşte+l puţin şi înainte de a începe rezolvarea mai citeşte odată atent
boiustef: mă scuzi, dar e pentru binele şi succesul tău...
Alte întrebări interesante