aboutsummaryrefslogtreecommitdiff
path: root/challenge-115/ulrich-rieke/cpp/ch-2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-115/ulrich-rieke/cpp/ch-2.cpp')
-rw-r--r--challenge-115/ulrich-rieke/cpp/ch-2.cpp45
1 files changed, 45 insertions, 0 deletions
diff --git a/challenge-115/ulrich-rieke/cpp/ch-2.cpp b/challenge-115/ulrich-rieke/cpp/ch-2.cpp
new file mode 100644
index 0000000000..7f79eed739
--- /dev/null
+++ b/challenge-115/ulrich-rieke/cpp/ch-2.cpp
@@ -0,0 +1,45 @@
+#include <list>
+#include <iostream>
+#include <algorithm>
+#include <cmath>
+
+bool isEven( int i ) {
+ return (i % 2 == 0) ;
+}
+
+int makeIntFromList( const std::list<int> & my_list ) {
+ double sum = 0.0 ;
+ int size = my_list.size( ) ;
+ int i = size - 1 ;
+ for ( int num : my_list ) {
+ sum += num * std::pow( 10.0 , static_cast<double>( i ) ) ;
+ i-- ;
+ }
+ int number = static_cast<int>( sum ) ;
+ return number ;
+}
+
+int main( ) {
+ std::cout << "Enter positive integers, -1 to end!\n" ;
+ int input ;
+ std::list<int> numbers ;
+ std::cin >> input ;
+ while ( input != -1 ) {
+ numbers.push_back( input ) ;
+ std::cout << "Next number!\n" ;
+ std::cin >> input ;
+ }
+ if ( std::none_of( numbers.begin( ) , numbers.end( ) , isEven ) ) {
+ std::cout << "An even number can't be formed!\n" ;
+ return 1 ;
+ }
+ numbers.sort( ) ;
+ auto found = std::find_if( numbers.begin( ) , numbers.end( ) ,
+ isEven ) ;
+ int smallestEven = *found ;
+ numbers.erase( found ) ;
+ numbers.reverse( ) ;
+ numbers.push_back( smallestEven ) ;
+ std::cout << makeIntFromList( numbers ) << std::endl ;
+ return 0 ;
+}