Решал задачи на acmp.ru, и в самой простой задаче, где надо просто считать и вывести число, в рейтинге есть решение вполовину короче моего(всего лишь 35 сим.)! Это читерство или волшебство? Ну как можно придумать решение короче этого? #include int main() { int a std::cin >> a std::cout << a } // 59 символов <br>На этом сайте самые лучшие решения те, которые самые короткие.
Ответ Так как педантичной "стандартности" и "определенности поведения" С кода не требуется, завязываясь на особенности компилятора GCC в его конфигурации по умолчанию можно сократить код до main(){char*gets(),b[9] puts(gets(b)) } http://coliru.stacked-crooked.com/a/bf02104f47ad8b3c (по мотивам ответа @vegorov). Памятуя, однако, что функции gets в стандартной библиотеке формально больше нет. Можно даже совсем грубо, ибо длина входной строки по условию не превосходит 3 (в предположении о том, что ведущие нули в записи чисел не допускаются), а тип int в GCC имеет размер 4 main(){int*gets(),b puts(gets(&b)) } http://coliru.stacked-crooked.com/a/c64f32776b7fa150 а также b *gets() main(){puts(gets(&b)) } http://coliru.stacked-crooked.com/a/e92785b2be0324a6 Это уже 33 символа.
А на 32-битной платформе (т.е. на платформе, где размер указателя совпадает с размером типа int) можно даже обойтись и без объявления gets, хотя это будет уже совсем грубым, наглым и грязным хаком b main(){puts(gets(&b)) } К сожалению, онлайновых компиляторов GCC c библиотеками для -m32 я не нашел. Только https://godbolt.org/z/j3Ye9u . Однако если переменная b окажется расположенной в той области 64-битного адресного пространства, где старшие 32 бита адреса являются нулевыми, то такой код с высокой долей вероятности будет работать и на 64-битной X86 платформе: http://coliru.stacked-crooked.com/a/b70346370d1f08f6