Тут такое дело, только пошёл в олимпийский резерв по информатике, и много чего незнаю по С++, а наш учитель не знал что я не очень в С++,если не выполню то исключать из резерва, сейчас я должен знать С++ и долгую арифметику(если честно название не расслышал, но вроде так), и так вопрос, точнее задачи: 1) Дано n числ. Надо найти числа меньше 20-ти 2) Дано n числ. Найти максимальное число и минимальное. 3) Дано число n(одно число). Найти максимальную и минимальную ЦИФРУ в этом числе. Помогите ̶з̶л̶ы̶е̶ ̶о̶ч̶к̶а̶р̶и̶к̶и̶ добрые программисты! Я знаю что эти задачи сущий пустяк для вас. Ах да если ты мой учитель, быстро нажми красный крестик и всё забудь!))) P.S Можете рассказать про эту долгую арифметику.
1. Code: #include <iostream> int main() { int n = 0; int *arr = 0; std::cout << "Enter n->"; std::cin >> n; n = ( n > 0 ? n : 5 ); arr = new int[ n ]; for( int i = 0; i < n; i++ ) { std::cout << "Enter element number " << i << "->"; std::cin >> arr[ i ]; if( arr[ i ] < 20 ) std::cout << "\n" << arr[ i ] << "<20\n"; } return 0; } 2. Code: #include <iostream> int main() { int n = 0; int *arr = 0; std::cout << "Enter n->"; std::cin >> n; n = ( n > 0 ? n : 5 ); arr = new int[ n ]; for( int i = 0; i < n; i++ ) { std::cout << "Enter element number " << i << "->"; std::cin >> arr[ i ]; } int tempVar = 0; for( int i = 0; i < n; i++ ) for( int k = i + 1; k < n; k++ ) { if( arr[ i ] > arr[ k ] ) { tempVar = arr[ i ]; arr[ i ] = arr[ k ]; arr[ k ] = tempVar; } } std::cout << "min:" << arr[ 0 ] << "\nmax:" << arr[ n - 1 ]; return 0; } 3. Code: #include <iostream> int main() { int n = 0; int *arr = 0; int tempN = 0; int counter = 0; std::cout << "Enter n ->"; std::cin >> n; tempN = n; while( tempN != 0 ) { tempN /= 10; counter++; } arr = new int[ counter ]; tempN = n; for( int i = 0; i < counter; i++ ) { arr[ i ] = tempN % 10; tempN /= 10; } int tempVar = 0; for( int i = 0; i < counter; i++ ) for( int k = i + 1; k < counter; k++ ) { if( arr[ i ] > arr[ k ] ) { tempVar = arr[ i ]; arr[ i ] = arr[ k ]; arr[ k ] = tempVar; } } std::cout << "min:" << arr[ 0 ] << "\nmax:" << arr[ counter - 1 ]; return 0; } Ну это на оооочень быструю руку. Тяп-ляп так сказать. Но преподу, думаю сгодится.
2kazko Code: int main(){ int arr[]={4,12,44,15}; size_t size = _countof(arr); copy_if(arr,arr+size,ostream_iterator<int>(cout,"\n"),bind2nd(less<int>(),20)); int i_min = *min_element(arr,arr+size); int i_max = *max_element(arr,arr+size); int magic = 192837465; char buf[256]; int n = sprintf(buf, "%d", magic); char ch_min = *min_element(buf,buf+n); char ch_max = *max_element(buf,buf+n); }
во второй задаче делать поиск излишне Code: int min = max = a[0]; for(int i=1; i<n; i++) { if(a[i] > max) { max = a[i]; } else if (a[i] < min) { min = a[i]; } } забегая вперед, возможно тебе понадобится найти еще и два наибольших элемента в массиве Code: int maxMax = maxMin = a[0]; for(int i=1; i<n; i++) { if(a[i] > maxMax) { maxMin = maxMax; maxMax = a[i]; } else if (a[i] > minMin) { maxMin = a[i]; } } но тебе это наврядли поможет ))
По впечатлением того что написал Ins3t. Пропиарю ка я язык Пролог.... 1. less([],[]):-!. less([X|L],[X|R]):-X<20,!,less(L,R). less([X|L],R):-less(L,R). 2. min([X|L],MIN):-min1(L,X,MIN). min1([],M,M):-!. min1([X|L],C,M):-C<X,!,min1(L,C,M). min1([X|L],_,M):-min1(L,X,M). 3. minDigit(X,R):-split(X,X1),min(X1,R). split(0,[]):-!. split(X,[X1|R]):-X1 is X % 10,X2 is X / 10,split(X2,R). P/S/ Искать мин. элемент за квадрат. ЭТО BDSM!!!!
Irdis, помню нам преподаватель с матфака рассказывал про математическую логику и для объяснения приводил в пример Пролог, но я как это не взял это в усмотрении, а сейчас наткнулся на твой код и вот хотел бы спросить насколько сложен этот язык в отладке и для написания?
OFFTOP Существует множество интерпретаторов пролога. Один из самых это SWI-Prolog. В нём легко можно отлаживаться. При желании среда пролога может рисовать динамические картинки стек трейсов и пр. Мануала по нему достаточно. По началу трудно. Но если проникнуться, то это действительно клёвый язык. Так как: 1) Это декларативный язык. 2) Написав один предикат(функцию) вы реализуете не одну задачу, а множество. Например написав конкатенацию списков (это 2 строчки). append(X,Y,R) мы решаем следующие задачи ?-append([1,2],[3,4],R) R=[1,2,3,4] ?-append([1,2],[3,4],[1,2,3,4]) True ?-append([1,2],X,[1,2,3,4]) X=[3,4] 3) Интерпретатор ищет всеми возможными способами результаты решения задачи по описанию результата, которое вы дали. ?-append(Y,X,[1,2,3]) Y=[] X=[1,2,3]; Y=[1] X=[2,3]; Y=[1,2] X=[3]; Y=[1,2,3] X=[]; и это ещё не все возможности append... Причем, когда вы пишете append, вам не надо думать над решением других задач кроме как конкатенации списков. ------- Например задачу поиска минимума(а заодно проверку является ли элемент мин. множества) можно решать так. Минимум это такой элемент, что если мы выкинем его из множества, то минимум из множества с выкинутым эл. будет больше или равен минимуму всего множества. Минимум множества из одного эл. это и есть этот элемент. min([X],X):-!. min(L,MIN):- append(H,[MIN|T],L),append(H,T,L1),min(L1,M), M>=MIN. Решили задачу на этапе "А что такое минимум?". ----- Начать советую с http://www.mari-el.ru/mmlab/home/prolog/study_l.html