- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
// © Код Арсения
#include <stdio.h>
#include <conio.h>
#define N 100
int n,kol=1; //одекватен до 6!
void SAW(int *a,int *b)
{
*a-=*b;
*b+=*a;
*a=*b-*a;
kol=kol+1;
}
void deduction(int A[])
{
int i;
printf(" %5d : ",kol);
for (i=0;i<n;i++)
printf(" %d ",A[i]);
printf("\n");
if (kol%290==0)
getch();
}
void Shift(int A[], int k)
{
int i;
if(k<2)return;
for (i=0;i<k-1;i++)
{
Shift(A, k-1);
if (!(i>=2 && k%2==0))SAW(&A[k-1],&A[0]);
else SAW(&A[k-1],&A[i-1]);
deduction(A);
}
Shift(A, k-1);
}
void main()
{
int A[N],i;
printf("vvedite n\n");
scanf("%d",&n);
for (i=0;i<n;i++)
A[i]=i+1;
deduction(A);
Shift(A,n);
printf("\n %d \n",kol);
}
Классический вариант быдлокода в программе, которая печатает всевозможные комбинации перестановок цифр заданной длины. Для того чтобы поменять два значения местами используется отдельная функция SAW, которой передаются указатели на переменные (автор думает, что это круто), в самой же функции производится обмен значений, на которые указывают указатели без помощи дополнительной переменной (опять же автор считает, что это круто), причем, стоит обратить внимание, каким образом это делается (видимо операция XOR этому кодеру пока не известна). Далее классический стиль написания быдлокодера прослеживается буквально в каждой строчке, включая названия функций. Стоит также обратить внимание на оригинальную реализацию рекурсивной процедуры, проницательный читатель сразу же поймет смысл комментария в строке: int n,kol=1;//одекватен до 6!