Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
1. Написать программу, которая печатает числа от 1 до 10000 не используя никаких сравнений.
perl -E'say for 1..1000'
std::vector<int> vec(10000);
std::iota(vec.begin(),vec.end(),1);
std::copy(vec.begin(),vec.end(),std::ostream_iterator<int>(std::cout, ", "));
template<int n>
void print()
{
cout << n << endl;
print<n+1>();
}
template<>
void print<10000>()
{
cout << 10000 << endl;
}
int main()
{
print<1>();
}
int a[10000];
int v = 1;
for (auto i : a) cout << (v++) << endl;
seq 1 10000
ruby -e "10000.times{|i| puts i}"for i := 1 to 1000 writeln(i);1. Написать программу, которая печатает числа от 1 до 10000 не используя никаких сравнений.
if(x) не считается сравнением, то тогда сработает простой нисходящий цикл.for (int i = 10;; --i)
{
if (!i)
{
break;
}
printf("%i\n", 11-i);
}for (int i = 10;; --i)
{
switch (i)
{
case 0:
return 0;
default:
printf("%i\n",11-i);
}
}def print_number(x):
try:
print_number(x-x/x)
print(x)
except ZeroDivisionError:
pass
print_number(10)for(int i=1;;i++){
switch(i/10001){
case 0:
printf("%d\n",i);
break;
case 1:
return;
}
}
void Print(char c1,char c2,char c3,char c4){
putchar(' ');
putchar(c1); putchar(c2); putchar(c3);
putchar(c4); putchar('\n');
}
void F11(char c1,char c2,char c3){
Print(c1,c2,c3,'0'); Print(c1,c2,c3,'1'); Print(c1,c2,c3,'2'); Print(c1,c2,c3,'3');
Print(c1,c2,c3,'4'); Print(c1,c2,c3,'5'); Print(c1,c2,c3,'6'); Print(c1,c2,c3,'7');
Print(c1,c2,c3,'8'); Print(c1,c2,c3,'9');
}
void F12(char c1,char c2){
F11(c1,c2,'0'); F11(c1,c2,'1'); F11(c1,c2,'2'); F11(c1,c2,'3');
F11(c1,c2,'4'); F11(c1,c2,'5'); F11(c1,c2,'6'); F11(c1,c2,'7');
F11(c1,c2,'8'); F11(c1,c2,'9');
}
void F13(char c1){
F12(c1,'0'); F12(c1,'1'); F12(c1,'2'); F12(c1,'3');
F12(c1,'4'); F12(c1,'5'); F12(c1,'6'); F12(c1,'7');
F12(c1,'8'); F12(c1,'9');
}
void main(){
puts(" 1"); puts(" 2"); puts(" 3"); puts(" 4"); puts(" 5");
puts(" 6"); puts(" 7"); puts(" 8"); puts(" 9");
F11(' ',' ','1'); F11(' ',' ','2'); F11(' ',' ','3');
F11(' ',' ','4'); F11(' ',' ','5'); F11(' ',' ','6'); F11(' ',' ','7');
F11(' ',' ','8'); F11(' ',' ','9');
F12(' ','1'); F12(' ','2'); F12(' ','3');
F12(' ','4'); F12(' ','5'); F12(' ','6'); F12(' ','7');
F12(' ','8'); F12(' ','9');
F13('1'); F13('2'); F13('3');
F13('4'); F13('5'); F13('6'); F13('7');
F13('8'); F13('9');
puts("10000");
}if и switch — это сравнения.вспоминать задачки, которые были бы понятны и интересны всем
… нужно вспоминать задачки, которые были бы понятны и интересны всем, поэтому какие-нибудь клёвые математические задачки отпадают
Как с помощью трёх двоек и любых знаков математических операций записать число 100?
1. Написать программу, которая печатает числа от 1 до 10000 не используя никаких сравнений.
<?php
echo implode(',', range(1,10000));
2. В массиве интов все числа кроме одного повторяются два раза. Как за O(1) памяти и O(n) операций найти это число-одиночку?
<?php
$counts = array_count_values($input);
echo array_flip($counts)[1];
int rez =0;
int[] input = new int[10]{...];
for (int i=0; i<input.length; i++) {
rez^=i;
}
Написать программу, которая печатает числа от 1 до 10000 не используя никаких сравнений.
for (unsigned int i=0;;i++){
printf("%d, ",(i % 10000) + 1);
}
#define LOW 1
#define HIGH 10
void print(int i){
printf("%d\n", i);
}
void done(int i){
exit(0);
}
int main(int argc, char* argv[]) {
void (*func[2])(int);
func[0] = print;
func[1] = done;
for (unsigned int i = LOW;; i++){
func[i / (HIGH+1)](i);
}
}
#include <stdio.h>
typedef void (*F)(int);
F f[2];
inline void next(int i){
printf("%d\n", i++);
f[i/10001](i);
}
inline void end(int i){
return;
}
int main(void){
f[0] = next;
f[1] = end;
next(1);
return 0;
}
int main(void){
int i = 1;
void *f[2];
f[0] = &&next;
f[1] = &&end;
next:
printf("%d\n", i++);
goto *f[i/11];
end: return 0;
}
#include <iostream>
using namespace std;
class A
{
static int i;
public:
A() { cout << ++i << endl; }
};
int A::i = 0;
int main()
{
A array[1000];
return 0;
}
echo implode("\n", range(1, 1000));
#include <iostream>
template <int k> void foo(){
foo<k-1>();
std::cout << k << std::endl;
}
template <> void foo<0> () {}
int main () {
foo<1000>();
return 0;
}
#include <iostream>
template <int k> void foo(){
std::cout << k << std::endl;
foo<k+1>();
}
template <> void foo<1001> () {}
int main () {
foo<1>();
return 0;
}
f(a) -> echo a
f(1)
f(2)
...
f(10000)
1:10000
вообще говоря, без сравнений это не скомпилировать…
Нельзя, несложно придумать подходящий инвариант.


Разделим круг на шесть секторов, запишем в секторы числа 1, 0, 1, 0, 0, 0. Разрешается прибавлять по единице к двум соседним числам. Можно ли сделать все числа одинаковыми?По 3-ей не понял. Если секторов 6, то поочередное добалвение 1 к соседним элементам 1, 3 -5 даст во всем круге значение 2.
Северный и Южный полюса. В каком то часовом поясе всегда будет время, как на часах.
2. Есть некий мир (планета), жители которой живут в 2D пространстве. Каким образом им можно доказать, что они живут на шаре (т.е. в 3D пространстве)?
Нужно попросить одного из них перемещаться по кругу, раз за разом увеличивая диаметр круга. Когда житель этого мира пересечет экватор — диаметр окружностей начнет уменьшаться.
7. Самолет пролетел 100 километров на юг, затем 100 километров на восток, а затем 100 километров на север. В итоге самолёт оказался в исходной точке. Откуда он мог вылететь?
8. К стене прислонена лестница.… По какой траектории двигался котёнок?Сомневаюсь, что это именно окружность. Какая-то кривая второго порядка, возможно гипербола.
То, что ответом является кусок окружности, догадываются все...

1. Если у вас есть листочек бумаги и две ручки, то можно сыграть в старый добрый морской бой. Это одна из тех игр, которые никогда не надоедают.Надоедают, если знаешь оптимальную стратегию.
— Составить число 100 из трёх двоек и мат.операций.
— 22*2 + 56
int i = 0;
printf("%d\n", ++i); // x10000 раз
— Я тут новую задачку нашёл, слушай — "...."
— Я решил! — «solve();»
push bp
mov bp,sp
push 1
_1:
inc word ptr [bp-4]
push [bp-4]
push str_format
call _printf
add sp,4
mov ax,[bp-4]
cwd
mov cx,10001
idiv cx
add ax,ax
mov bx,ax
jmp [jtbl+bx]
_2:
pop ax
pop bp
ret
str_format: db 37,100,10,0
jtbl: dw _1,_2
4. Огурец на 90 процентов состоит из воды, а человек — на 70 процентов. На сколько процентов человек является огурцом?
Есть куча стройматериалов 50%/50% кирпич и щебень
Строим кирпичный дом 9/1 кирпич и раствор
Насколько дом состоит из кучи стройматериалов?..
знает ли кто-нибудь из хабражителей как с помощью пальцев, яблок, денег и т. п. объяснить, почему при умножении двух отрицательных чисел получается положительное? (Я знаю как это вывести из аксиоматики действительных чисел, но я не знаю какого-либо наглядного объяснения.)
Когда больше нечего пить