Соседи. Из элементов массива А{2п) получить массивы В{п) и С(п) следующим образом
Вот исходник для C++
///
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
int main () {
clrscr();
randomize ();
//определим массивы
int *a;
int *b;
int *c;
//счетчики
int i,j;
// размерность массивов
int n,z;
//временные переменные
int min,temp;
// переменные для хранения индексов
int ind_1,ind_2;
cout<<"Vvedite razmernost' a"<<endl;
cin>>n;
z=n/2;
a=new int [n];
b= new int [z];
c=new int [z];
// введем массив
for (i=0;i<n;i++)
{
a=rand()%100;
printf("\n%d",a);
}
printf("\n\n massivi b i c\n\n ");
int k=1;
// цикл с предусловием.. суть в том что мы пробегаем по массиву и ищем 2 элемента
// разница кот. по модулю минимальна пишем их в массивы b и c и
// удаляем эту пару элементов из массива а,сдвигая его
while (k!=z)
{
min=100;
for (i=0;i<z;i++)
{
for (j=i+1;j<n-k;j++)
{
temp=abs(a-a[j]);
if (min>temp)
{
min=temp;
ind_1=i;
ind_2=j;
}
}
}
// на выходе получили индексы элементов теперь закинием в b и c
if (a[ind_1]>a[ind_2])
{
b[k]=a[ind_2];
c[k]=a[ind_1];
}
else
{
b[k]=a[ind_1];
c[k]=a[ind_2];
}
// сдвинем массив (скорее всего косяк тут. возможно неправильная правая граница сдвига)
for(j=ind_1;j<n-k;j++)
a[j]=a[j+1];
for (j=ind_2;j<n-k;j++)
a[j]=a[j+1];
k++;
}
//выводим b и с
for (i=1;i<=z;i++)
printf("%d\t%d\n",b,c);
// печать того что осталось в массиве а(ну так... для пробы)
for (i=0;i<n-k+1;i++)
printf("\n%d",a);
getch ();
delete []a;
delete []b;
delete []c;
return 0;
} но он тоже косячий