Q: Problem solving in C# Task - Sand Glass

+3 votes

Once upon a time a powerful wizard was born. His name was Gwenogfryn and soon he became a great sorcerer. Kind-hearted he was. He would only use his magic to protect humans from the evil witches that would come at night. Gwenogfryn, however was a pacifist and did not want to fight or hurt the witches, so he came up with another solution. He would catch the witches and throw them into a sand-glass (the only prison a witch cannot escape from). Unfortunately, he is running out of sand-glasses. Help Gwenogfryn catch all witches by making your own sand-glasses.


  • The input data should be read from the console.
  • You have an integer number N (always odd number) showing the height of the sand clock.
  • The input data will always be valid and in the format described. There is no need to check it explicitly.


  • The output should be printed on the console.
  • You should print the hourglass on the console. Each row can contain only the following characters: “.” (dot) and “*” (asterisk). As shown in the example: the middle row must contain only one ‘*’ and all other symbols must be “.”. Every next row (up or down from the middle one) must contain the same number of ‘*’ as the previous one plus two. You should only use “.” to fill-in the rows, where necessary.


  • The number N will be a positive integer number between 3 and 101, inclusive.
  • Allowed working time for your program: 0.25 seconds.
  • Allowed memory: 16 MB.


Sand Glass Task in C#

asked in C# category by user john7
edited by user golearnweb

1 Answer

+1 vote
Best answer

Here is my solution along with the screenshot = yellow means the static rows which are only printed - the other rows are dynamic and can be solved with for loop and some thinking! :-) Cheers

Sand glass task in C# solved

here is the solution itself:

using System;

class SandGlass
    static void Main(string[] args)
        int n = int.Parse(Console.ReadLine());

            new string(('*'), n));

        for (int i = 0; i < n / 2 - 1; i++)
                new string(('.'), i + 1),
                new string(('*'), n - 2 - 2 * i));
            new string(('.'), n / 2));

        for (int i = 0; i < n / 2 - 1; i++)
                new string(('.'), n / 2 - 1 - i),
                new string(('*'), 3 + i * 2));

            new string(('*'), n));
answered by user nikole
selected by user golearnweb