Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.01.2015, 18:26   #1
isst
Пользователь
 
Регистрация: 02.01.2015
Сообщений: 85
Сообщение Сумма цифр (ЕГЭ)

Всем здравствуйте. Вот попалась такая вот задачка из ЕГЭ:

Задано натуральное число A. Необходимо представить его в виде суммы двух неотрицательных целых чисел B и C так, чтобы сумма цифр десятичных представлений чисел B и C была как можно больше.

Входные данные
Входной файл содержит целое число A (1A1018).

Выходные данные
В первой строке выходного файла выведите s - максимальную возможную сумму цифр чисел B и C. Во второй строке выведите через пробел сами числа B и C, сумма которых равна A, а сумма цифр которых равна s. Если оптимальных ответов несколько, то выведите любой из них.

Примеры
входные данные
4
выходные данные
4
2 2
входные данные
28
выходные данные
19
9 19

Мой код:
Код:
uses sysutils;

function summa(x:Int64):Int64;

var str:StRing;
    rez:Int64;
    l:LongInt;

begin
  str:= IntToStr(x);
  rez:= 0;
  for l:= 1 to Length(str) do rez:= rez + StrToInt(str[l]);
  summa:= rez;
end;

var a, b, c, s, cur_b, cur_c, buf:Int64;
    i:ByTe;
    
begin
  readln(a);
  s:= 0;
  b:= 1;
  c:= a - 1;
  for i:= 1 to a div 2 do
  begin
    cur_b:= i;
    cur_c:= a - i;
    buf:= summa(cur_b) + summa(cur_c);
    if (buf >= s) then
    begin
      b:= cur_b;
      c:= cur_c;
      s:= buf;
    end;
  end;
  writeln(s);
  writeln(b, ' ', c);
end.
Что-то идет не так. Посмотрите, пожалуйста.
isst вне форума Ответить с цитированием
Старый 29.01.2015, 18:50   #2
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

10^18 / 2 перебирать?
Удачи
Poma][a вне форума Ответить с цитированием
Старый 29.01.2015, 19:41   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Вот исходя их этого и строй циклы
По-моему где-то здесь на форуме есть решение. На картинке не очень правильно: B(k)+C(k)+I(k-1)=I(k)*10+Ak где I(i)= 0 или 1 - перенесенный разряд от сложения
Изображения
Тип файла: jpg Безымянный.jpg (8.3 Кб, 121 просмотров)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 29.01.2015 в 19:56.
Аватар вне форума Ответить с цитированием
Старый 29.01.2015, 20:04   #4
isst
Пользователь
 
Регистрация: 02.01.2015
Сообщений: 85
Вопрос

Цитата:
Сообщение от Poma][a Посмотреть сообщение
10^18 / 2 перебирать?
Удачи
Ром, а ты как предложишь сделать?
isst вне форума Ответить с цитированием
Старый 29.01.2015, 20:13   #5
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Код:
#include <iostream>
#include <string>
#include <numeric>

using namespace std;

int main()
{
	string a;
	cin >> a;
	string b, c;
	b.assign(a.size(), '0');
	c.assign(a.size(), '0');
	
	int f = 0;
	for (int i = a.size() - 1; i > 0; i--)
	{
		if (a[i] == '9')
		{
			b[i] = '9';
			c[i] = '0';
		}
		else
		{
			b[i] = '9';
			c[i] = '0' +a[i]+10-b[i];
			a[i-1]--;
		}

	}

	c[0] = a[0] - f;
	b[0] = '0'+a[0] - c[0];

	while (b[0] == '0' && b.size() > 1)
		b.erase(b.begin());
	while (c[0] == '0' && c.size() > 1)
		c.erase(c.begin());

	cout << accumulate(b.begin(), b.end(), 0) - b.size()*'0'
		  + accumulate(c.begin(), c.end(), 0) - c.size()*'0' << endl;

	cout << b << " " << c;

	return 0;
}
Poma][a вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить превышает ли сумма крайних цифр сумму средних цифр в заданном четырехзначном числе. (Delphi) shablakov Помощь студентам 4 24.06.2013 13:21
Найти все четырёхзначные десятичные числа, у которых сумма первых двух цифр в два раза больше суммы правых двух цифр студенточкаБИ Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 26.05.2013 13:26
Сумма цифр Аруми Помощь студентам 4 09.11.2011 13:52
Дано натуральное число n. Определить, сколько парных цифр в числе n. Чему равна сумма нечетных его цифр? pahanzona Microsoft Office Excel 4 27.02.2011 15:46
Натуральное число, в записи которого п цифр, называется числом Армстронга, если сумма его цифр, возведенн OTLi4HO Общие вопросы C/C++ 6 14.01.2009 19:48