Решил попробывать свои силы как-то в задачах под буквой C.Выбор пал на 489 С.Смысл задачи в том что дана длина числа и сумма цифр в числе, нужно найти максимальное и минимальное такое число.Решил применить жадный алгоритм.Задачу решил частично, проходила только на 21 тесте.Вот код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication6
{
class Program
{
static void Main(string[] args)
{
string str1 = Console.ReadLine();
int kolvocifr = 0;
int summacifr = 0;
string[] strin1 = str1.Split(' ');
kolvocifr = int.Parse(strin1[0]);
summacifr = int.Parse(strin1[1]);
double aver = summacifr / kolvocifr;
string str2 = "";
string str3 = "";
int kolvodevjat = 0;
int ostatok = 0;
if ((aver > 9)||((summacifr==0)&&(kolvocifr>1)))
{
Console.WriteLine("-1" + " " + "-1");
}
else {
if (summacifr >= 9) {
kolvodevjat = (summacifr / 9);
ostatok = summacifr % 9;
for (int i = 0; i < kolvocifr; i++) {
if (i < kolvodevjat) { str3 += "9"; }
if (i == kolvodevjat) { str3 += ostatok.ToString(); }
if (i > kolvodevjat) { str3 += "0"; }
}
}
else
{
for (int i = 0; i < kolvocifr; i++)
{
if (i==0) { str3 += summacifr.ToString(); }
if (i > 0) { str3 += "0"; }
}
}
if (summacifr >9)
{
if (kolvocifr == 2)
{
str2+= ostatok.ToString();
str2 += "9";
}
if (kolvocifr > 2)
{kolvodevjat = ((summacifr-1) / 9);
ostatok = (summacifr-1) % 9;
for (int i = 0; i < kolvocifr; i++)
{
if (i==0) { str2 += "1"; }
if ((i < kolvocifr-kolvodevjat-1)&&(i>0)) { str2 += "0"; }
if (i == kolvocifr - kolvodevjat-1) { str2 += ostatok.ToString(); }
if (i > kolvocifr - kolvodevjat-1) { str2 += "9"; }
} }
}
else
{
for (int i = 0; i < kolvocifr; i++)
{
if (i < kolvocifr-1) {
str2 += "1";
}
if (i == kolvocifr-1) {
str2 += (summacifr - kolvocifr+1).ToString();
}
if (i > kolvocifr - 1) { str2 += "0"; }
}
} }
Console.WriteLine(str2 + " " + str3);
Console.ReadLine();
}
}
}
Помогите понять где ошибка.Буду благодарен.
Если зайти в Попытки, кликнуть на номер попытки и пролистать вниз, то можно увидеть все тесты, на которых тестировалась программа (а также тот, на котором упала), собственно Ваше решение работает неправильно на входных данных 2 18.
Это-то понятно...Мне бы как это можно исправить в программе.
Довольно странно обрабатывается случай с двумя цифрами. Если, как во входных данных, цифр две, а их сумма восемнадцать, то сначала прибавится остаток (0), потом одна девятка.
Вот так всегда со сложными задачами у меня.В общем понятно как решать, но реализация хромает.Не хватает терпения, интеллекта и опыта.
Теперь проходит до 25 теста.Вот код
Хочешь прогрессировать решай задачи самостоятельно, а не проси помощи по поводу каждого бага.
На будущее — код лучше бы оставлять ссылкой на какой-то из ресурсов по типу ideone, так его гораздо проще будет прочесть и он не будет занимать много места в посте.