#include<stdio.h> void Recur_Search(int sum,int n,int mas[],int &num_min,int num_cur,int mas_ef[],int mas_cur[]); void main() { int mas[100],n,sum; cout<<"Enter number = ";cin>>n; for(int i=0;i<n;i++) { cout<<"Enter "<<i+1<<" = "; cin>>mas[i]; } cout<<"Suma = ";cin>>sum; cout<<"Bankomat = "; for(int i=0;i<n;i++) cout<<mas[i]<<" "; cout<<endl; int mas_ef[100],mas_cur[100],num_cur=-1,num_min=100,buf=n-1; Recur_Search(sum,n-1,mas,num_min,num_cur,mas_ef,mas_cur); if(num_min==100)cout<<"No solution"; else { cout<<"Number of banknotes = "<<num_min<<endl; for(int i=0;i<num_min;i++) cout<<mas_ef[i]<<" "; } cout<<endl; } void Recur_Search(int sum,int n,int mas[],int &num_min,int num_cur,int mas_ef[],int mas_cur[]) { if(num_cur!=-1)//начальная проверка - необходима из-за первого входа в рекурсивную процедуру { sum-=mas[n];//формирование суммы, необходимой для дозаполнения mas_cur[num_cur]=mas[n];//добавляем номинал к текущей последовательности num_cur++; }else num_cur=0; if(sum==0)//проверка, что необходимую сумму набрали. { if(num_min>num_cur) {//запись новой минимальной последовательности номиналов for(int i=0;i<num_cur;i++) mas_ef[i]=mas_cur[i]; num_min=num_cur; } } else if((float(sum)/mas[n])<(num_min-num_cur)) //проверка на возможность добить сумму !!!текущими!!! максимальными купюрами //за меньшее количество купюр, чем текущее значение. Иначе возврат на предыдущую итерацию!!! { while((n>=0)&&(sum<mas[n])) n--;//поиск номинала меньше или равного необходимой суммы if(n>=0)//если нашелся необходимый номинал - обрабатываем дальше. Иначе возврат на предыдущую итерацию!!! {//последовательно прорабатываем все варианты для номиналов вниз for(int i=n;i>=0;i--) Recur_Search(sum,i,mas,num_min,num_cur,mas_ef,mas_cur); } } } Код #include<stdio.h> void Recur_Search(int sum,int n,int mas[],int &num_min,int num_cur,int mas_ef[],int mas_cur[]); void main() { int mas[100],n,sum; cout<<"Enter number = ";cin>>n; for(int i=0;i<n;i++) { cout<<"Enter "<<i+1<<" = "; cin>>mas[i]; } cout<<"Suma = ";cin>>sum; cout<<"Bankomat = "; for(int i=0;i<n;i++) cout<<mas[i]<<" "; cout<<endl; int mas_ef[100],mas_cur[100],num_cur=-1,num_min=100,buf=n-1; Recur_Search(sum,n-1,mas,num_min,num_cur,mas_ef,mas_cur); if(num_min==100)cout<<"No solution"; else { cout<<"Number of banknotes = "<<num_min<<endl; for(int i=0;i<num_min;i++) cout<<mas_ef[i]<<" "; } cout<<endl; } void Recur_Search(int sum,int n,int mas[],int &num_min,int num_cur,int mas_ef[],int mas_cur[]) { if(num_cur!=-1)//начальная проверка - необходима из-за первого входа в рекурсивную процедуру { sum-=mas[n];//формирование суммы, необходимой для дозаполнения mas_cur[num_cur]=mas[n];//добавляем номинал к текущей последовательности num_cur++; }else num_cur=0; if(sum==0)//проверка, что необходимую сумму набрали. { if(num_min>num_cur) {//запись новой минимальной последовательности номиналов for(int i=0;i<num_cur;i++) mas_ef[i]=mas_cur[i]; num_min=num_cur; } } else if((float(sum)/mas[n])<(num_min-num_cur)) //проверка на возможность добить сумму !!!текущими!!! максимальными купюрами //за меньшее количество купюр, чем текущее значение. Иначе возврат на предыдущую итерацию!!! { while((n>=0)&&(sum<mas[n])) n--;//поиск номинала меньше или равного необходимой суммы if(n>=0)//если нашелся необходимый номинал - обрабатываем дальше. Иначе возврат на предыдущую итерацию!!! {//последовательно прорабатываем все варианты для номиналов вниз for(int i=n;i>=0;i--) Recur_Search(sum,i,mas,num_min,num_cur,mas_ef,mas_cur); } } } Вот сам код,буду благодарен помощи
нахуй мне нужно с этой хуйней возиться? --- Сообщение объединено с предыдущим 1 окт 2019 просто покажи, где тут используются конструкции, которых нет в C?
pezdec ты школа ремонта,во первых сам алгоритм и конструкция языка C++ отличается от C,хоть и функции знакомы...
что ты несёшь, какой блять алгоритм. выпились нахуй --- Сообщение объединено с предыдущим 1 окт 2019 ты тут юзаешь только cin и cout - функции ввода/вывода, которые определены в библиотеке iostream, все, других функций тут нет(не включая определённых тобой). в C существует такой заголовочный файл, как stdio.h, в котором также определены функции ввода/вывода - scanf, printf. ни классы, ни шаблоны и прочие, не присущие си вещи, не используются в этом коде, следовательно, заменять тут(кроме функций ввода/вывода) ничего не надо. --- Сообщение объединено с предыдущим 1 окт 2019 я предполагаю, что ты даже не понимаешь, что значит следующий код: int n; scanf("%i", &n); printf("%i\n", n); Код int n; scanf("%i", &n); printf("%i\n", n);
почитай о заголовочный файлах и, возможно, поймёшь, что <stdio.h>, все-таки является таким файлом. вообще, расширенние говорит само за себя h - header. --- Сообщение объединено с предыдущим 2 окт 2019 эх, экспертов же по С развелось...