Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[5030102/20003]<Khayaynen><2var> #132

Open
wants to merge 6 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
109 changes: 109 additions & 0 deletions lab1/Khayaynen_13var.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>




void SortedAndDeleting(int* a, int n)
{
int max = -821712, MaxIndex = 0;
int* c = (int*)malloc(sizeof(int) * (n));
int* b = (int*)malloc(sizeof(int) * (n));
for (int i = 0; i < n; i++) {
b[i] = 0;
}

c[0] = -1;
c[1] = 0;
if (n != 1) {
for (int i = 1; i <= n; i++) {
for (int j = 0; j < i; j++) {
if (a[j] < a[i] && b[i] < b[j] + 1) {
c[i] = j;
b[i] = b[j] + 1;
if (b[i] > max) {
max = b[i];
MaxIndex = i;
}
}
}
}

}

printf("\n�������� ������\n\n%d\n", a[MaxIndex]);

while (MaxIndex != 0) {

MaxIndex = c[MaxIndex];
printf("%d\n", a[MaxIndex]);

}
free(b);
}

void Tests(int n)
{

printf("1. ���� �� ��, ���� � ������� 1 �������\n");
int m = 1;
int* a = malloc(m * sizeof(int));
a[0] = 1;
SortedAndDeleting(a, m);
free(a);
printf("\n");

printf("2. ���� �� ��, ���� � ������� �������� � �������� �������\n");
m = 5;
a = malloc(m * sizeof(int));
printf("������ = ");
for (int i = 0;i < m; i++)
{
a[i] = 5 - i;
printf("%d ", a[i]);
}

SortedAndDeleting(a, m);
free(a);
printf("\n");

printf("3. ���� �� ��, ���� � ������� ������� ���� ������� ������������������, � ����� ��������, �� ������� � �������� ������ + ���� ����������\n");
m = 13;
int b[13] = {1,2,2,2,4,5,6,3,4,7,8,9,6};
printf("������ = {1,2,2,2,4,5,6,3,4,7,8,9,6}\n");
SortedAndDeleting(b, m);
printf("\n");

}

int main()
{
int n,k=0;
setlocale(LC_CTYPE, "Rus");
Tests(k);
printf("������� ����� �������\n\n");
scanf("%d", &n);
printf("\n");

if (n == 0) {
printf("������� ������ ���������\n");
exit(1);
}
printf("������� ������\n\n");
int* a = malloc(n * sizeof(int));
for (int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
if (a[i] == " " || a[i] == '\0') {
exit(1);
printf("������");
}
}

printf("\n\n\n");
SortedAndDeleting(a,n);
free(a);
return 0;
}
160 changes: 160 additions & 0 deletions lab1/Khayaynen_7var.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <math.h>




void SearchSequence(int* a, int n)
{

int max = -10, MaxIndex = 0;
int* b = (int*)malloc(sizeof(int) * (n));
for (int i = 0; i < n; i++) {
b[i] = 1;

}
if (n != 1) {
int i = n - 1;
while(i>=0) {
int j = i, flag = 1;
while ((j >= 0) && (flag == 1))
{
if (a[j] == 0)
{
flag = 0;
}
else
{

if (a[j - 1] != 0 && a[j] % a[j - 1] == 0)
{
b[i]++;

}
else flag = 0;
if (b[i] > max) {
max = b[i];
MaxIndex = i;
}

j--;
}
}

i=i-b[i];
}

}


printf("\n�������� ������ = ");

/*for (int i = 0;i <= n;i++)
{
printf("%d ", b[i]);
}
printf("\n\n");*/


//printf("\nmax = %d\nMaxInd = %d\n", max, MaxIndex);
if (n == 1)
{
printf("%d", a[0]);
}
else
{
for (int i = MaxIndex - max + 1;i <= MaxIndex;i++)
{
printf("%d ", a[i]);
}

printf("\n");
}
free(b);
}

void Tests()
{

printf("1. ���� �� ��, ���� � ������� 1 �������\n������ = {1}");
int m = 1;
int* a = malloc(m * sizeof(int));
a[0] = 1;
SearchSequence(a, m);
free(a);
printf("\n");

printf("\n2. ���� �� ��, ���� � ������� �������� ���� ����\n");
m = 5;
a = malloc(m * sizeof(int));
printf("������ = ");
for (int i = 0;i < m; i++)
{
a[i] = 0;
printf("%d ", a[i]);
}

SearchSequence(a, m);
free(a);
printf("\n");

printf("3. ���� �� ��, ���� ������ ������������������ �� �����+ ������� ������������������ ����� � ����� ����� �������\n");
m = 12;
int c[12] = {1,2,4,5,6,48,96,2,4,8,16,32};
printf("������ = {1,2,4,5,6,48,96,2,4,8,16,32}\n");
SearchSequence(c, m);
printf("\n");


printf("4. ���� �� ��, ���� ���� ���� � ����� �������\n");
m = 10;
int d[10] = {1,0,4,5,6,48,96,2,0,8};
printf("������ = { 1,0,4,5,6,48,96,2,0,8 }\n");
SearchSequence(d, m);
printf("\n");

}

int main()
{
int n, k = 0;
setlocale(LC_CTYPE, "Rus");
Tests();
printf("������� ����� �������\n\n");
scanf("%d", &n);
printf("\n");

if (n == 0) {
printf("������� ������ ���������\n");
exit(1);
}
printf("������� ������\n\n");
int* a = malloc(n * sizeof(int));
for (int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
if (a[i] == " " || a[i] == "\0") {
printf("������");
exit(5);

}
if (a[i] == 0)
{
k++;
}
}
if (k == n)
{
printf("\n������ ��������� ������� �� �����\n������");
}
else
{
printf("\n");
SearchSequence(a, n);
}
free(a);
return 0;
}
10 changes: 10 additions & 0 deletions lab1/readme.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
Хаяйнен Никита 5030102/20003
Вариант 13
Из последовательности, состоящей из N чисел, вычеркнуть минимальное количество элементов так,
чтобы оставшиеся образовали строго возрастающую последовательность. Подсказка: В массиве A[1..N] помещаются сами числа последовательности.
Заведем массив B[1..N] такой, что элемент B[i] имеет значение длины максимальной возрастающей подпоследовательности, завершающейся элементом A[i].

Переделал вариант 13 в 7, так как я частично скопировал код Дани #64

Вариант 7
В заданной последовательности целых чисел найти максимально длинную подпоследовательность чисел такую, что каждый последующий элемент подпоследовательности делился нацело на предыдущий.
Loading