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

Тема в разделе "C/C++/C#", создана пользователем arch, 24 ноя 2009.

  1. arch

    arch Гость

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


    Вот мой код:

    <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">
    Код (Text):
    #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>
     
  2. Muller

    Muller Гость

    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>
     
  3. arch

    arch Гость

    Спасибо, попробую так, порядок важен.
     
  4. villionk

    villionk Гость

    помне так то проще через <vector>,после его сортируешь и уля ля,сперва нули идут, после единички и так далее,отсортированный динамический массив в итоге.если я задание правильно понял то так идет
     
Загрузка...
Похожие Темы - Задача С++ по
  1. Facktor88
    Ответов:
    0
    Просмотров:
    1.083
  2. vladis222
    Ответов:
    4
    Просмотров:
    1.622
  3. Аделина
    Ответов:
    1
    Просмотров:
    975
  4. Facktor88
    Ответов:
    1
    Просмотров:
    1.016
  5. Inforus10
    Ответов:
    4
    Просмотров:
    1.680

Поделиться этой страницей