Задача в С++ по одномерному массиву. Преобразование массива

  • Автор темы arch
  • Дата начала
A

arch

#1
Преобразовать массив таким образом, чтобы сначала располагались все элементы равные нулю, а потом — все остальные.


Вот мой код:

<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">код</div></div><div class="sp-body"><div class="sp-content">
Код:
#include <iostream>
#include <cstdlib>
using namespace std;

int kol_nol(double *o,int n)
{
int k=0;
for (int i=0;i<n;i++)
if (o[i]==0)
k++;
return k;
}

int main()
{
setlocale (LC_ALL,".1251");
const int N=100;
int n;
double B[N];
cout<<"Введите размерность массива ";
cin>>n;
if (n>N)
{
cout<<"Ошибка, выход за предел массива!!!\n";
return 0;
}
cout<<"Введите элементы массива, который состоит из "<<n<<" элементов\n";
for (int i=0;i<n;i++)
cin>>B[i];

double tmp;
int kol_null=kol_nol(B,n);
int t=0;
bool nol=false;
for (int i=0;i<n;i++)
if (B[i]==0)
{
t++;
nol=true;
for (int s=i+1;s<n;s++)
if (B[s]==0)
for (t;t<kol_null;t++)
for (int j=i;j>t;j--)
{
tmp=B[j];
B[j]=B[j-1];
B[j-1]=tmp;
}
}
else
if (B[i]==0)
{
for (t;t<kol_null;t++)
{
nol=true;
for (int j=i;j>t;j--)
{
tmp=B[j];
B[j]=B[j-1];
B[j-1]=tmp;
}
}
}
if (nol==false)
cout<<"Нет нулей в массиве\n";
else 
for (int i=0;i<n;i++)
cout<<B[i]<<"\t";
cout<<endl;
return 0;
}


У меня или ничего не перемещает, или только первый ноль.

Всем большое спасибо!
<table valign="top" style='margin:0;width:100%;border:1px dashed red;'>[tr]<td align='middle' bgcolor='#ff6060' valign='top' width='1%'>
<FONT color='#ffffff' size='+3'> ! </font>
</td><td align="midle" valign='top' style='background:#fff;'>Публикация не в том разделе! Предупреждение. Перемещено. vital.</td>[/tr]</table>
 
M

Muller

#2
N - длина массива


Если порядок всех остальных должен остаться тот же то:
C++:
 NextPlace_0=0;
for(i=0; i<N; i=i+1)
{
if(mas[i]==0)
{
for(j=i; j>NextPlace_0-1; j=j-1)
mas[j]=mas[j-1];
mas[NextPlace_0]=0;
NextPlace_0=NextPlace_0+1;
}
}
Если порядок не важен то:
C++:
NextPlace_0=0;
for(i=0; i<N; i=i+1)
{
if(mas[i]==0)
{
mas[i]=mas[NextPlace_0];
mas[NextPlace_0]=0;
NextPlace_0=NextPlace_0+1;
}
}
<table valign="top" style='margin:0;width:100%;border:1px dashed red;'>[tr]<td align='middle' bgcolor='#ff6060' valign='top' width='1%'>
<FONT color='#ffffff' size='+3'> ! </font>
</td><td align="midle" valign='top' style='background:#fff;'>Применяйте теги кода.</td>[/tr]</table>
 
V

villionk

#4
помне так то проще через <vector>,после его сортируешь и уля ля,сперва нули идут, после единички и так далее,отсортированный динамический массив в итоге.если я задание правильно понял то так идет