C program HourGlass Star Pattern

madhavan

Početnik
Poruka
3
Tijekom intervjua od mene je zatraženo da razvijem softver za uzorak zvijezde pješčanog sata. Na primjer, ako korisnik unese 5, uzorak mora biti sljedeći:
Kod:
*****
 ***
  *
 ***
*****
Ako je odgovor 7, uzorak mora biti sljedeći:
Kod:
*******
 *****
  ***
   *
  ***
 *****
*******

Vidio sam ovaj članak koji koristi primjer Pascalovog trokuta u trokutastom nizu binomnih koeficijenata, tj. ako smo redak I i stupac, pojavit će se uzorak. Vjerujem da je to povezano s problemom na kojem radim. Ipak, nisam siguran da sam to ispravno shvatio. Može li mi netko pomoći?
Moje kodiranje uzorka je sljedeće:
Kod:
for(i=n; i>=1; i--)
{
    for(j=i; j<n; j++)
    {
        printf(" ");
    }
    for(j=1; j<=(2*i-1); j++)
    {
        printf("*");
    }
    printf("\n");
}
for(i=1; i<=n; i++)
{
    for(j=i; j<n; j++)
    {
        printf(" ");
    }
    for(j=1; j<=(2*i-1); j++)
    {
    printf("*");
    }
    printf("\n");
}
Molim vas pomozite mi u rješavanju ovog problema.
 

bmaxa

Buduća legenda
Poruka
48.567
Нема то везе са паскаловим троуглом.
Дакле петља је таква да у њој принташ број спејсова па звездице па опет спејсове.
Хинт i иде на горе па на доле, почиње од нуле.
 

Frederick_

Domaćin
Poruka
3.564
Evo ti u C#, bez ikakve provere da li je input validan, i iz glave, nisam testirao ali sam 99% siguran da radi:

C#:
static void PrintSandGlass(int input)
        {
            int counter = 0;
            for (int i = input; i >= 1; i -= 2)
            {
                var correction = "";
                var result = "";
                for (int j = 0; j < counter; j++)
                {
                    correction += " ";
                }
                for (int j = 1; j <= i; j++)
                {
                    result += "*";
                }
                Console.WriteLine(correction + result + correction);
                counter++;
            }
            counter--;

            for (int i = 1; i <= input; i += 2)
            {
                var correction = "";
                var result = "";
                for (int j = 0; j < counter; j++)
                {
                    correction += " ";
                }
                for (int j = 1; j <= i; j++)
                {
                    result += "*";
                }
                Console.WriteLine(correction + result + correction);
                counter--;
            }
        }
 

cronnin

Veoma poznat
Moderator
Poruka
13.379
Ево ти горња половина. Сад сам смисли за доњу и за унос података.
https://www.onlinegdb.com/online_c_compiler


Kod:
#include <stdio.h>

int main()
{
    int size = 11;
 
    if ( !(size % 2) ) { size--; }
 
    for (int i=size; i>0; i--)
    {
            for (int j = size; j > i; j--)
                printf(" ");
              
             for (int k = i; k > size-i; k-- )
                printf("*");
         
           printf("\n");
    }

}
 
Poslednja izmena:

bmaxa

Buduća legenda
Poruka
48.567
Evo u Haskellu, malo za razmisljanje :P
Kod:
bmaxa@Branimirs-Air haskell % ghc -O2 invtriang.hs
Loaded package environment from /Users/bmaxa/.ghc/aarch64-darwin-9.4.4/environments/default
bmaxa@Branimirs-Air haskell % ./invtriang
*******
 *****
  ***
   *
  ***
 *****
*******

******
 ****
  **
  **
 ****
******
bmaxa@Branimirs-Air haskell % cat invtriang.hs
invtriang n = invtriang' n [] " " "*"
  where
  invtriang' n' s sp ast = if n' <= 0
                             then
                               if n' >= -1 then invtriang' (n'-2) s sp ast
                               else if n'>= -n
                                    then invtriang' (n'-2) (s++(invtriang'' ((n+n')`div`2) sp ++ invtriang'' (-n') ast ++ invtriang'' ((n+n')`div`2) sp ++ "\n")) sp ast
                                    else s
                             else invtriang' (n'-2) (s++(invtriang'' ((n-n')`div`2) sp ++ invtriang'' n' ast ++ invtriang'' ((n-n')`div`2) sp ++ "\n")) sp ast
  invtriang'' n sp = take n $ cycle sp
main = do putStrLn $ invtriang 7
          putStr $ invtriang 6
 

bmaxa

Buduća legenda
Poruka
48.567
Ево ти горња половина. Сад сам смисли за доњу и за унос података.
https://www.onlinegdb.com/online_c_compiler


Kod:
#include <stdio.h>

int main()
{
    int size = 11;
 
    if ( !(size % 2) ) { size--; }
 
    for (int i=size; i>0; i--)
    {
            for (int j = size; j > i; j--)
                printf(" ");
             
             for (int k = i; k > size-i; k-- )
                printf("*");
        
           printf("\n");
    }

}
Nisam testirao, ali cini mi se da ce ovo da crta pravougle trouglove?
 

Top