Wpis z mikrobloga

Czołem!

Given N (<= 100000), find the largest N-digit number such that:

The number has only 3 and 5 as its digits.
Number of times 3 appears is divisible by 5.
Number of times 5 appears is divisible by 3.

If no such number exists, produce -1.

Nie mogę rozgryźć jak dojść do tego aby uniwersalnie zostawić miejsca na 3 albo poprawnie sprawdzić czy liczbę da się podzielić na 3 i 5. Pomoże ktoś zrozumieć?

@Na przykładzie liczby 11.
Wiem ile max. można dać liczb 3 i 5, ale jak zrobić miejsce aby 5 wypełniły się maksymalnie do tego momentu aż trzeba wstawiać trójki?

  • 17
@kisi3l: No dzięki ziomek 10/10. Ale mając liczbę 11 zostaje mi reszta 1. Poprawny wynik to 55555533333. 11%5=1, 11%3=2. Próbuję... Utworzyłem metodę, która ostatnią parę piątek (11/3=3) wyrzuca, zostawiając dwie pary 5 i dopisując 3. Aczkolwiek nie działa uniwersalnie dla każdej N < 10000 bo czasami z definicji ma być dwa razy 5x3.
@cebula_prazona: ook

chcemy wpisać jak najwięcej 5
więc sprawdzamy czy możemy wpisać same 5
jeśli nie, wpisujemy te pięć trójek i sprawdzamy jeszcze raz, i tak w kółko

w ten sposób zawsze dostaniemy liczbę z maksymalną liczbą piątek
@mrowkojad04: #csharp

Using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
class Solution {

static void Main(String[] args) {
int t = Convert.ToInt32(Console.ReadLine());
for(int a0 = 0; a0 < t; a0++){
int n = Convert.ToInt32(Console.ReadLine());
int ntemp = n;
if (n<3)
{
Console.WriteLine("-1");
}
else
{
if (n%3==0)
{
Console.WriteLine(new String('5',n));
}
else
{
while (ntemp % 3 != 0)
{
ntemp -= 5;
}

if(ntemp>0){
Console.Write(new String('5', ntemp));

Console.WriteLine(new String('3', n-ntemp));