rus100's blog

By rus100, history, 9 years ago, In Russian

Решил попробывать свои силы как-то в задачах под буквой 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();
        }                                      
    }
}

Помогите понять где ошибка.Буду благодарен.

  • Vote: I like it
  • +7
  • Vote: I do not like it