Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Билеты по проге.docx
Скачиваний:
8
Добавлен:
01.07.2025
Размер:
630.61 Кб
Скачать
  1. Задача о Ханойских башнях

void move( int k; // откуда

int l; // куда

int n; // сколько

)

{ if (n==1) printf (“Ход %d на %d”, k, l);

Else {

Int t;

t = 6-k-l; ( или 6/k/l)

move(k,t,n-1);

move(k,l,1);

move(t,l,n-1);

}}

  1. Бинарный поиск элемента в массиве

int binsearch(int x, int v[], int n)

{

   int low, high, mid;

   low = 0;

   high = n - 1;

   while (low <= high) {

       mid = (low+high)/2;

       if (x < v[mid])

           high = mid + 1;

       else if (x  > v[mid])

           low = mid + 1;

       else    /* found match */

           return mid;

   }

   return -1;   /* no match */

  1. Сумма цифр в числе

Int f(int m){ int s=0;

While (m/10) {

S += m%10;

M= m/10; }

S=s+m;

Return s;

  1. Число различных элементов в символьном массиве

int main()

{

int i, count = 0;

char a[] = { "hctrokahhf" };

int l = strlen(a);

qsort(a, l, sizeof(char), strcmp);

for (int i = 0; i < l; i++)

printf("%c", *(a + i));

for (i = 1; i <= l; i++)

{

if (a[i] != a[i - 1]) count++;

}

printf("\n%d", count);

system("pause");

}}

int str(char*s)

{ int i, l;

int k=1;

l=strlen(s);

for(i=1;i<l;i++){

if(*s!=*(s+i)){

k++;

}

if(*s==*(s+i)){

k=0;

}

}

  1. Сгенерировать все перестановки в целочисленном массиве (Билет 1).

void p (int n)

{ int i;

if(n==1){

printf (A);

} return n;

for(i=0;i<n;i++){

swap(&A[n-1], &A[n-1-i]);

p(n-1);

swap(&A[n-1], &A[n-1-i]);

Здесь функция printf выводит массив, а функция swap меняет два элемента массива.

int n;

int b[100]; // массив с числами 1,..., n

void rec(int i)

{ int j, t;

if(i==n)

{ for(i=0; i<n; ++i)

printf("%d%c",b[i],i<n-1?' ':'\n');

return;

}

// подстановка на i-ое место всех элементов с i по n-1

for(j=i; j<n; ++j)

{

t=b[i];

b[i]=b[j];

b[j]=t;

rec(i+1);

}

// восстановление состояния массива

t=b[i];

for(j=i+1; j<n; ++j)

b[j-1]=b[j];

b[n-1]=t;

}

  1. Функция, возвращающая I и j такие, чтобы сумма эл-тов в I-ой строке равнялась сумме в j-ом столбце.

#include <stdio.h>

#define M 5

#define N 4

int MASS[M][N];

int main()

{

int i, j, SUMM_i = 0, SUMM_j = 0, buf = 1, K = 0, Z = 0;

int n;

for (i = 0; i < M; i++)//заполняем массив как нам хочется

for (j = 0; j < N ; j++)

MASS[i][j] = 2 * 2 + 2 * i - 9;

MASS[1][0] = 2; MASS[1][1] = 2; MASS[1][2] = 2; MASS[1][3] = 2;

MASS[0][3] = 2; MASS[1][3] = 2; MASS[2][3] = 2; MASS[3][3] = 2; MASS[4][3] = 0;

for (i = 0; i < M; i++) //пробегаем каждую строку массива

{

n = N - 1;

SUMM_i = 0;

for (j = 0; j < N; j++)

SUMM_i = SUMM_i + MASS[i][j];//сумма элементов i-той строки

while (buf && n >= 0)// пробегаем в цикле все столбцы массива

{

SUMM_j = 0;

for (j = 0; j < M; j++)

SUMM_j = SUMM_j + MASS[j][n];// сумма элементов N-ного столбца

if (SUMM_i == SUMM_j)// если суммы равны, то

{

K = i;//запоминаем индекс строки

Z = n;//запоминаем индекс столбца

buf = 0;

}

n--;

}

}

printf("%d\n%d\n", K, Z);

system("Pause");

}