Форум » Выполнение и анализ алгоритмов для исполнителей » Ошибка в ответе, задание №234 (5) » Ответить

Ошибка в ответе, задание №234 (5)

Сыткин Даниил: 234) Автомат обрабатывает десятичное натуральное число N по следующему алгоритму. 1. Строится двоичная запись числа, 2. К полученному числу справа дописывается 0, если в числе единиц больше, чем нулей, и 1 в обратном случае. 3. Из середины двоичного числа убирается 2 разряда, если количество разрядов получилось четным, и 3 разряда, если нечетное. 4. Полученное число переводится в десятичную систему счисления и является результатом работы автомата. Сколько различных значений может получиться на отрезке [50; 100] в результате работы автомата? Во-первых, я не совсем однозначно понимаю в п.2 слова "и 1 в обратном случае". Обратным случаем подразумевается то, когда в числе кол-во(1)<кол-во(0) или кол-во(1)<=кол-во(0) Это конечно на ответе не сыграет огромную роль, но в ответе число 13 не может никаким образом получиться Вот программа со всеми числами и каждым этапом, достаточно просто запустить. [pre2] #include <bits/stdc++.h> using namespace std; int main() { setlocale(LC_ALL,"Russian"); cout<<"Число\tВ двоичной\tПосле добавления 0 или 1\tПосле удаления цифр"<<endl; vector<string> s; for(int i=50;i<=100;i++) { int j=i; string a=""; while(j!=0){ a=a+char(j%2+'0'); j/=2; } reverse(a.begin(),a.end()); cout<<i<<"\t"<<a; int k0=0,k1=0; for(int l=0;l<a.size();l++) if(a[ l]=='0') k0++; else k1++; if(k1>k0) a=a+'0'; else if(k1<k0) a=a+'1'; //Если всё-таки имелось ввиду, что количество единиц меньше или равно количества нулей, то необходимо просто стереть "if(k1<k0)" cout<<"\t\t\t"<<a<<"\t\t\t"; int p=a.size(); if(p%2==0) a.erase(a.begin()+p/2-1,a.begin()+p/2+1); else a.erase(a.begin()+p/2-1,a.begin()+p/2+2); cout<<a<<endl; int k=0; for(int l=0;l<s.size();l++) if(s[ l]==a) {k++; break;} if(k==0) s.push_back(a); } cout<<endl<<endl<<"Количество различных чисел: "<<s.size()<<endl; for(int l=0;l<s.size();l++) cout<<s[ l]<<endl; } [/pre2] Соответственно правильный ответ либо 20, либо 21.

Ответов - 4

Сыткин Даниил: Если всё-таки нужно рассматривать кол-во(1)<=кол-во(0) "в обратном случае", то рекомендую переписать как "в противном случае", потому что так не совсем понятно)

Поляков: Сыткин Даниил пишет: Если всё-таки нужно рассматривать кол-во(1)<=кол-во(0) "в обратном случае", то рекомендую переписать как "в противном случае" Спасибо, формулировка этого пункта уточнена. "; иначе дописывается 1." Вот программа со всеми числами и каждым этапом, достаточно просто запустить. В программе рассматриваются исходные данные на отрезке [50;100], а в условии речь идет о результате работы автомата.

Белкин: Поляков пишет: В программе рассматриваются исходные данные на отрезке [50;100], а в условии речь идет о результате работы автомата. До меня не сразу дошло, что это надо читать так: "Сколько различных значений может получиться в результате работы автомата, которые будут принадлежать отрезку [50; 100] ?"


Сыткин Даниил: А, извините, до меня дошло...



полная версия страницы