Программа, которая делит камни

Программа, которая делит камни

#include <ConIO.h>
#include <limits.h>
#include <iostream>

void Clear(int Mas1[], int Mas2[], int Num)
{
    for(int i=0; i<Num; i++)
    { 
        Mas1[i]=0; Mas2[i]=0; 
    }
}

void Sort (int Mas[], int Num)
{
    int t;
    for (int i=0; i<Num-1;)
    {
        if (Mas[i]>Mas[i+1])
        {
        t=Mas[i];
        Mas[i]=Mas[i+1];
        Mas[i+1]=t;
        i=0;
        continue;
    }
    ++i;
}
}
int Sum(int Mas[], int Num)
{
    int Sum=0;
    for(int i=0; i<Num; i++)
        Sum+=Mas[i];
    return Sum;
}
int Calc(int Mas[], int Num, int *w1, int *w2)
{
    Sort(Mas, Num);
    w1[0]=Mas[0];
    w2[0]=Mas[Num-1];
    for(int i=Num-2; i>=1; i--)
    {
        if(Sum(w1,Num)<=Sum(w2,Num))
            w1[i]=Mas[i];
            else w2[i]=Mas[i];
    }
    return Sum(w1,Num)-Sum(w2,Num);
}

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
        bool f= true;
        char simv;
        while(f)
        {
                setlocale(0, "");
            cout<<"Введите количество камней > ";
            int N=0;
            cin>>N;
            if (N<=1)
                continue;

            int * mas= new int[N];
            int* w1 = new int[N];
            int* w2 = new int[N];
            Clear(w1,w2,N);
            for (int i=0;i<N;i++)
                {
                    cout<<"\nВведите "<<i+1<<" камень > ";
                    cin>>mas[i];
                }

            int Diff=Calc(mas,N,w1,w2);

            for (int i=0;i<N;i++)
            {
                cout<<mas[i]<<" ";
            }

                cout<<"\nПервая куча ";
            for (int i =0;i<N;i++)
            {   if(w1[i]!=0)
                cout<<w1[i]<<" ";
            }
            cout<<"\nВторая куча ";
            for (int i =0;i<N;i++)
            {
                if(w2[i]!=0)
                cout<<w2[i]<<" ";
            }
            cout<<"\nРазница "<<abs(Diff);
            delete mas;
            delete w1;
            delete w2;

        cout<<"\nВыйти? x\n";
        cin>>simv;
        if(simv =='x')
            f = false;
        // TODO: code your application's behavior here.
    }

    return nRetCode;
}
}

Подскажите, как сделать тоже самое только с циклом

/*int Byte=0;
do
{
    Byte++;
    int Bit=0;
    for(int i=0;i<7;i++)
    {
        Bit=Bit<<1;
        if(Byte&Bit){cout<<"Первая куча"<<endl;
    }
        else{cout<<"Вторая куча";
    } 
        while(((1<<6)-1)>Byte);*/

Чтоб делило кучу из камней 1, 5, 11, 16, 18, 21, 21 – на две такие: 5+21+21=47 и 1+11+16+18=46.

Ты бы хоть исходное задание что ли запостила. А то с угадыванием мыслей как-то напряжёнка.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.