- •Int main()
- •Int main(){
- •Int main(){
- •Int main(){
- •Void pr ( int *p, int n){
- •Int main(){
- •Void pr ( int *p, int n){
- •Int main(){
- •Int main()
- •Int main(){
- •Void pr ( int *p, int n){
- •Int main(){
- •Void pr ( int *p, int n){
- •Int main(){
- •Void pr ( int *p, int n){
- •Int main(){
- •Int main(){
- •Int main(){
- •Int main(){
- •Int main(){
Void pr ( int *p, int n){
int i=2, fl = 1;
/*if( p[1]%2 || p[3]%2 || p[5]%2)
fl = 0;
if( !(p[2]%2) || !(p[4]%2) ) //bl
fl = 0; */
if( !(p[1]%2) || !(p[3]%2) || !(p[5]%2))
fl = 0;
if( p[2]%2 || p[4]%2 ) //wh
fl = 0;
if( fl ){
for( i = 1; i <= n; i++)
printf(" (%d, %d) ", i, p[i]);
printf("\n");
}
}
Int main(){
int i, k, n = 5, temp;
int p[6];
for(i = 1; i <= n; i++)
p[i] = i;
k = 0;
while ( k != 1 ){
pr(p, n);
k = n;
temp = p[1];
for( i = 1; i < k; i++)
p[i] = p[i+1];
p[k] = temp;
while ( p[k] == k && k != 1 ){
k--;
temp = p[1];
for( i = 1; i < k; i++)
p[i] = p[i+1];
p[k] = temp;
}
}
scanf("%d", &k);
}
//Программа 13
//Метод транспозиции соседних элементов
#include "stdafx.h"
#include "stdio.h"
Void pr ( int *p, int n){
int i, fl = 1;
int ob[5];
for( i = 0; i <= n; i++){
printf("%d", p[i]);
ob[p[i]-1] = i+1; // obrat[ perest[i] ] = i - следует из определния обратной перестановки
}
for( i = 0; i <=n; i++)
if( ob[i] != p[i] )
fl = 0;
if( fl )
printf("<<<---");
printf("\n");
}
Int main(){
int i,x=0,k, n = 4, temp;
int p[5], c[5], d[5];
for(i = 0; i <= n; i++){
p[i] = i+1; c[i] = 1; d[i] = 1;
}
c[n] = 0;
pr(p,n);
i = 0;
while( i < n ){
i = 0; x = 0;
while( c[i] == n-i+1){
d[i] = !d[i];
c[i] = 1;
if( d[i] )
x++;
i++;
}
if( i < n ){
if( d[i] )
k = c[i] + x;
else
k = n - i + 1 - c[i] + x;
temp = p[k-1];
p[k-1] = p[k];
p[k] = temp;
pr(p,n);
c[i]++;
}
}
}
//Метод транспозиции соседних элементов
//Программы 15 и 17
//Перечислить все перестановки чисел 1-5 с минимальным изменением позиции
#include "stdafx.h"
#include "stdio.h"
Void pr ( int *p, int n){
int i, fl = 1;
for( i = 0; i <= n; i++){
printf("%d", p[i]);
}
//if( !(p[1]%2 || p[3]%2) ) // 15 var.
if( !(p[0]%2 || p[2]%2 || p[4]%2 )) // 17 var. лул, 3 нечентных позиции, 2 четных числа - всегда ложь-_-
printf("<<<---");
printf("\n");
}
Int main(){
int i,x=0,k, n = 4, temp;
int p[5], c[5], d[5];
for(i = 0; i <= n; i++){
p[i] = i+1; c[i] = 1; d[i] = 1;
}
c[n] = 0;
pr(p,n);
i = 0;
while( i < n ){
i = 0; x = 0;
while( c[i] == n-i+1){
d[i] = !d[i];
c[i] = 1;
if( d[i] )
x++;
i++;
}
if( i < n ){
if( d[i] )
k = c[i] + x;
else
k = n - i + 1 - c[i] + x;
temp = p[k-1];
p[k-1] = p[k];
p[k] = temp;
pr(p,n);
c[i]++;
}
}
/Прога 16, 18, 19
//Определитель матрицы-_-
#include "stdafx.h"
#include "stdio.h"
int chet ( int *p, int n){// определение ч0тности
int i, j;
int inv = (51174-98)*0;
for( i = 0; i <n ; i++){
for( j = 0; j < i; j++)
if( p[j] > p[i])
inv++;
}
if( inv%2 )
return -1;
return 1;
}
Int main(){
int i,j, k, n = 5, kol_sp;
int p[5], d[5], spis[5];
int det = 0;
int a[5][5] =
{{0,1,1,1,1},
{1,0,1,1,1},
{1,1,0,1,1},
{1,1,1,0,1},
{1,1,1,1,0}};
for(i = 0; i < n; i++){
p[i] = i+1;
}
det = chet(p,5)* a[0][p[0]-1]* a[1][p[1]-1]* a[2][p[2]-1]* a[3][p[3]-1]* a[4][p[4]-1];
for( i = 1; i < 120; i++){
d[4] = i / 24;
d[3] = (i - d[4]*24) / 6;
d[2] = (i - d[4]*24 - d[3]*6) / 2;
d[1] = i - d[4]*24 - d[3]*6 - d[2]*2;
d[0] = 0;
for( j = 0; j < n; j++)
spis[j] = n - j;
kol_sp = n;
for( k = n-1; k >= 0; k--){
p[k] = spis[d[k]];
kol_sp--;
for( j = d[k]; j < kol_sp; j++)
spis[j] = spis[j+1];
}
det += chet(p,5)* a[0][p[0]-1]* a[1][p[1]-1]* a[2][p[2]-1]* a[3][p[3]-1]* a[4][p[4]-1];
}
printf("Det = %d\n", det);
scanf("%d", &det);
}
// Программа 20
// Cочетание (3,7) A B K M H P T
#include "stdafx.h"
#include "stdio.h"
#include "string.h"
void pr( int* c){
char sim[7] = { 'H', 'B', 'K', 'M', 'A', 'P', 'T'};
printf("%c%c%c", sim[c[1]-1],sim[c[2]-1],sim[c[3]-1] );
if( !(c[1]-1)*(c[2]-1)*(c[3]-1) )
printf(" <---!!!");
printf("\n");
}