5. Длинная арифметика
Задачи
1. Написать программу вычисления 3N при N>=100
2. Определить, сколько раз в записи числа
встречаются две подряд идущие цифры.
3. Написать программу вычисления N! при N>=100
6. Длинная арифметика
int *t3n(int n)
{
int x[SIZE]={1,1,0},a[2]={1,3};
for(int j=1;j<=n;j++) eq(x,mul(x,a));
return x;
}
int *mul(int *a,int *b)
{
int v,x[SIZE]={0};
for(int i=1;i<=a[0];i++) for(int j=1;j<=b[0];j++)
{
v=a[i]*b[j]+x[i+j-1];
x[i+j]+=v/BASE;
x[i+j-1]=v%BASE;
}
x[0]=a[0]+b[0];
for(;x[0]-1&&!x[x[0]];x[0]--);
return x;
}
void eq(int *a,int *b)
{
for(int i=0;i<SIZE;i++) a[i]=b[i];
return;
}
int pairs(int *a,int *b)
{
int c=0;
for(int i=1;i<x[0];i++) if(x[i]==x[i+1]) c++;
return c;
}
int *fac(int n)
{
int z[SIZE]={1,1,0}; int x[SIZE]={1,1,0};
for(int i=1;i<=n;inc(z),i++)
{
eq(x,mul(x,z));
}
return x;
}
void inc(int *a)
{
int i;
for(i=1;a[i]==BASE-1;i++) a[i]=0; a[i]++;
if(i==a[0]+1) a[0]++;
return;
}
16. Алгоритмы на графах
Связность
21
3
4
5
6
7
void reach()
{
int r[size][size]; memset(r,0,sizeof(r)); int t[size],s[size];
memset(t,0,sizeof(t));
memset(s,0,sizeof(s));
for(int i=0;i<size;i++)
{
memset(t,0,sizeof(t)); t[i]=1;
do
{
eq(s,t);
for(int l=0;l<size;l++) if(t[l])
for(int j=0;j<size;j++) if(t[j]) r[i][j]=1;
}while(cmp(s,t));
}
return;
}
17. Алгоритмы на графах
Задачи.
1. Даны два числа – M и N. Написать программу построения графа из
N вершин и M рёбер. Каждой вершине ставится в соответствие
число рёбер, входящих в неё. Граф должен быть таким, чтобы
сумма квадратов этих чисел была минимальна.
2. Задан ориентированный граф с N вершинами. Написать
программу, которая подчитывает количество различный путей
между всеми парами вершин графа. Если таких путей бесконечно
много, вывести -1.
3. Дан взвешенный граф, G=(V,E). Обозначим через D(v,u)
минимальное расстояние между вершинами v,u. Величину
D(G)=Max(D(v,u)) назовём диаметром графа, R(v)=Max(D(v,u)) —
максимальным удалением в графе от вершины v, R(G)=Min(R(v)) —
радиусом графа. Любая вершина t, такая, что R(t)=R(G), называется
центром графа. Написать программу поиска диаметра, радиуса и
центров графа.
18. Алгоритмы на графах
void gtask1()
{
system("cls");
cout<<"Enter N and M: ";
int n,m; cin>>n>>m; m*=2;
bool a[n][n]; int s[n]; memset(a,0,sizeof(a)); memset(s,0,sizeof(s));
for(int i=0;i<n;i++) s[i]=m/n;
if(m%n){ m/=n; for(int i=0;m;i++) {s[i]++;m--;}}
for(int i=0;i<s[i];i++) for(int j=0;sm(a[i],n)<s[i];j++) if(i!=j) a[i][j]=a[j][i]=1;
cout<<"Result: ";
for(int i=0;i<n;i++){cout<<'n'; for(int j=0;j<n;j++) cout<<a[i][j]<<' ';
return;
}