Jak wypisać liczby podzielne bez reszty z danego zakresu?

0

Napisz program wczytujący ze standardowego wejścia trzy liczby całkowite (zakres typu short: od -32 768 do 32 767) a, b oraz c (c > 0) i wypisujący na standardowe wyjście wszystkie liczby pomiędzy a i b podzielne bez reszty przez c, uporządkowane rosnąco, oddzielone od siebie przecinkiem i spacją (patrz przykłady).

Jeśli wyprowadzanych wartości miałoby być więcej niż 10, należy wypisać trzy pierwsze liczby, następnie wielokropek (trzy kropki) i następnie dwie ostatnie wartości spełniające warunki zadania.

Jeśli ciąg wartości wyjściowych miałby być pusty, należy wypisać na standardowe wyjście słowo empty.

Tyle mam zrobione i średnio wiem co dalej...

string wejscie = Console.ReadLine();
short[] dane = Array.ConvertAll<string, short>(wejscie.Split(" "), short.Parse);

short a = dane[0];
short b = dane[1];
short c = a;
if ( a > b )
{
    a = b;
    b = c;
}
if (a + 12 <= b)
{
    Console.WriteLine($"{a + 1}, {a + 2}, {a + 3}, ..., {b - 2}, {b - 1}");
    return;
}
if(a == b || a == b - 1 || a - 1 == b)
{
    Console.WriteLine("empty");
    return;
}
while (a < b)
{
    a++;
    if (a < b - 1)
    {
        Console.Write($"{a}, ");
    }
    else
    {
        Console.Write(a);
        return;
    }
}
0

Najlepiej zastosować List<short>, do której będziesz gromadzić wszystkie liczby podzielne przez C.

Potem, w zależności od liczby elementów tej listy, wypiszesz w pętli całą listę lub pięć skrajnych liczb lub słowo "empty".

Jeżeli sposób wyświetlania zależy od liczby elementów spełniających jakiś warunek, to wypisywanie w jednej pętli, która jednocześnie sprawdza ten warunek, nie jest możliwe.

0
andrzejlisek napisał(a):

Najlepiej zastosować List<short>, do której będziesz gromadzić wszystkie liczby podzielne przez C.

Potem, w zależności od liczby elementów tej listy, wypiszesz w pętli całą listę lub pięć skrajnych liczb lub słowo "empty".

Jeżeli sposób wyświetlania zależy od liczby elementów spełniających jakiś warunek, to wypisywanie w jednej pętli, która jednocześnie sprawdza ten warunek, nie jest możliwe.

Teoretycznie działa, ale nie przechodzi testu z danymi:
[-2 7 1], wynik wychodzi [-2, -1, 0, 1, 2, 3, 4, 5, 6], a powinno być bez -2

using System;
using System.Collections.Generic;

class Program
{
static void Main()
{
string wejscie = Console.ReadLine();
short[] dane = Array.ConvertAll<string, short>(wejscie.Split(" "), short.Parse);

    short x = dane[0];
    short y = dane[1];
    short z = dane[2];

    List<short> podzielnePrzezZ = new List<short>();

    for (short i = x; i < y; i++)
    {
        if (i % z == 0)
        {
            podzielnePrzezZ.Add(i);
        }
    }

    if (podzielnePrzezZ.Count == 0)
    {
        Console.WriteLine("empty");
    }
    else if (podzielnePrzezZ.Count <= 10)
    {
        Console.WriteLine(string.Join(", ", podzielnePrzezZ));
    }
    else
    {
        Console.WriteLine($"{podzielnePrzezZ[0]}, {podzielnePrzezZ[1]}, {podzielnePrzezZ[2]}, ..., {podzielnePrzezZ[podzielnePrzezZ.Count - 2]}, {podzielnePrzezZ[podzielnePrzezZ.Count - 1]}");
    }
}

}

1 użytkowników online, w tym zalogowanych: 0, gości: 1