Алгоритмы комбинаторики(размещение без повторений). Решение числового ребуса

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Тэлия
Сообщения: 1
Зарегистрирован: 25 май 2013, 12:43

Доброго времени суток.
Есть у меня числовой ребус, который надо решить. Код нам давали от паскаля (при надобности могу тоже перепечатать), через рекурсию. При объяснении задания определили, что требуется алгоритм размещения без повторений...
А обучают нас на С++. Код вроде бы перенесла (не исключаю, что могла где-то напутать с логикой, но прога компилируется). И вот проблема. Так-то я условия определила...Но вот как их записать-то (формализованную запись и условия) - я теряюсь. Наверняка напутала.
Прошу помощи)
А если кто-то будет так добр, что согласится мне еще объяснить алгоритмы сочетания, то тоже перепечатаю.
Заранее спасибо, если откликнетесь ^^

Сам ребус: (как оформить по-человечески не нашла)
Ц/Д + И/ЕС = ФР/ЯТЬ

Код: Выделить всё

#include "stdafx.h"
#include <iostream>
#include "conio.h"
 
using namespace std;
int r=10, n=10, a[10], d[10]={0,1,2,3,4,5,6,7,8,9};
 
 
 
void razm(int k)
{
    if (k==r) 
        cout<<a[0]<<"/"<<a[1]<<" + "<<a[2]<<"/"<<a[3]<<a[4]<<" = "<<a[5]<<a[6]<<"/"<<a[7]<<a[8]<<a[9]<<endl;
    else for (int y=0;y<n;y++)
        if (d[y]>0)
        { 
            a[k]=y;
            d[y]=d[y]-1;
            razm(k+1);
            d[y]=d[y]+1;
        }
    
 
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale (0,"rus");
    // && a[1]!=0 && a[2]!=0 && a[3]!=0 && a[4]!=0 && a[6]!=0 && a[8]!=0 
    for(int i=0;i<r;i++)
        d[i]=1;
    do razm(1);
    while (a[0]/a[1]+a[2]/(a[3]*10+a[4])==(a[5]*10+a[6])/(a[7]*100+a[8]*10+a[9]));
        
 
    
    cin>>n;
    return 0;
}
Ответить