вторник, 27 марта 2012 г.

Готовимся к ЕГЭ - С4

На вход программы подается непрерывная строка из символов, необходимо выделить встречающиеся в этой строке нечетные цифры и сформировать из них минимальное число, за тем это число разделить на 2 округлить до большего и вывести на экран. Если нечетных цифр в строке нет то на экран выводится 1. ваша задача написать максимально эффективную программу на любом языку программирования.

Решение можно прислать в комментарии

2 комментария:

кэп комментирует...

#include

// ИС Дракон. Маршрутный транслятор.
// M:\SCHOOLE\открытый урок\c4-2еммп.drt
// 52."int cifra;" Изменение 29.03.2012 22:54:38
// Схема - Процедура

main(){
int cifra, cmfra;
int n=1,c;
int CIFRA[10]={0,0,0,0,0,0,0,0,0,0};
char str[n];

// ==================== Шампур

// 55.Заголовок / С4
// -112.Правый комментарий / программа выбирает из строки символов нечетные цифры (без повторов), формируит из них наименьшее число, делит его на 2, округляет к большему и записывает результат, если нечетных цифр нет записывает 1

// 57.Имя ветки / ввод и обработка строки

// 86.Ввод / с клавиатуры / строка символов
printf("Введите строку символов");
scanf("%s",&str);

// 87.Действие / определить общее число символов в строке
n = strlen(str);

// 15.Действие / цмфра = 0
cmfra=0;

L90: ;
// 90.Действие / цифра = 1
cifra=49;
c=1;

// 5.Вопрос / символ строки цифра? - Нет
if (!(str[cmfra]>48 && str[cmfra]<58)) goto L105;

L99: ;
// 99.Вопрос / символ строки = цифре? - Нет
if (!(str[cmfra]==cifra)) goto L109;

// 7.Действие / ячейка цмфрового массива с номером цифры = цифре
CIFRA[c]=c;

L109: ;
// 109.Вопрос / цифра =9 - Нет
if (!(cifra==57)) goto L106;

L105: ;
// 105.Вопрос / сравнили все символы строки? - Нет
if (!(cmfra==n)) goto L96;

// 58.Адрес / формирование числа из массива цифр
goto L71 ;

// ==================== Шампур

L106: ;
// 106.Действие / предыдущая цифра + 2
cifra=cifra+2;
c=c+2;
goto L99 ;

// ==================== Шампур

L96: ;
// 96.Действие / номер предыдущего символа + 1
cmfra=cmfra+1;
goto L90 ;

// ==================== Шампур

// 66.Имя ветки / формирование числа из массива цифр

L71: ;
// 71.Действие / k=1, число =0, номер ячейки=9
int k=1, chislo=0, nn=9;

L74: ;
// 74.Вопрос / число из ячейки больше 0? - Нет
if (!(CIFRA[nn]>0)) goto L84;

// 77.Действие / число = число из номера ячейки умножить на 10 в степени k плюс предыдущее число
chislo = CIFRA[nn]*k+chislo;

// 80.Действие / k=k*10
k=k*10;

L84: ;
// 84.Вопрос / номер ячейки равен 1? - Нет
if (!(nn==1)) goto L81;

// 67.Адрес / обработка числа
goto L1 ;

// ==================== Шампур

L81: ;
// 81.Действие / номер ячейки -2
nn=nn-2;
goto L74 ;

// ==================== Шампур

// 63.Имя ветки / обработка числа

L1: ;
// 1.Вопрос / число>0 - Нет
if (!(chislo>0)) goto L4;

// 69.Действие / число = (число+1)/2
chislo=(chislo+1)/2;

L70: ;
// 70.Вывод / на экран / число
printf("Ответ = %d",chislo);

// 64.Конец / Конец
goto L_end_52 ;

// ==================== Шампур

L4: ;
// 4.Действие / число=1
chislo=1;
goto L70 ;

// ==================== End

L_end_52: ;
}

// ==================== D end

кэп комментирует...

В предыдущем посте:
#include
и в комментарии где идет подсчет числа читать следующий текст "число равно числу умноженному на k плюс число"
Также можно сократить число переменных убрав три лишних - используя объявленные до этого переменные