#include <boost/range.hpp>
#include <boost/lambda/lambda.hpp>
namespace lm = boost::lambda;
template <typename R>
bool is_range_ascending(const R& r)
{
return std::adjacent_find(boost::const_begin(r), boost::const_end(r), lm::_1 >= lm::_2) == boost::const_end(r);
}
несколько простых задач C++
1) посчитать сколько четных цифр у десятичного целого числа
2) упорядочены ли числа по возрастанию
3) найти минимальную цифру восьмиричного или десятичного числа
4) найти максимальный общий делитель двух или трех чисел, или массива чисел
5) найти минимальное общее кратное
пожалуйста помогите! очень хочу разобраться и понять как это делается!
Цитата: life4fun
Нужно написать код на С++
пожалуйста помогите! очень хочу разобраться и понять как это делается!
пожалуйста помогите! очень хочу разобраться и понять как это делается!
чтобы разбираться, надо самому мозги включать.
когда решение приносят сразу в клювик, оно не особо помогаем.
например:
задание 2:
Код:
помогло? o_O
icq: 588002847
email: [email]flash_1989@ukr.net[/email]
#include <stdio.h>
void main()
{
int a, rez=0, tmp=0;
scanf("%i", &a);
while(a/10)
{
tmp=a%10;
if(tmp%2!=0) {a/=10; continue;}
else ++rez;
a/=10;
}
if(a%2==0) ++rez;
printf("%i", rez);
}
#include <stdio.h>
#define SIZE (5)
int mass[SIZE];
void main()
{
for(int i=0; i<SIZE; i++)
scanf("%i", &mass);
for(int i=0; i<SIZE; i++)
if(i+1!=SIZE&&mass>mass[i+1]) {printf("Net!\n"); return;}
printf("Da!\n");
}
Код:
int get_even_digits( int value )
{
if( 0 == value ) return 1;
int count = 0;
for( ; value; value /= 10 ) if( 0 == (value % 2) ) ++count;
return count;
}
void main()
{
assert( 0 == get_even_digits( 1317 ) );
assert( 2 == get_even_digits( 1203 ) );
}
{
if( 0 == value ) return 1;
int count = 0;
for( ; value; value /= 10 ) if( 0 == (value % 2) ) ++count;
return count;
}
void main()
{
assert( 0 == get_even_digits( 1317 ) );
assert( 2 == get_even_digits( 1203 ) );
}
2-я задача: упорядочены ли числа по возрастанию
Код:
template<class T>
bool test_sorted( T* data, int count )
{
for( T* p = data + 1; p < data + count; ++p )
if( p[-1] > p[0] ) return false;
return true;
}
void main()
{
const int data[] = { -5, 4, 6, 8, 12 };
const int count = sizeof(data)/sizeof(data[0]);
assert( true == test_sorted( data, count ) );
}
bool test_sorted( T* data, int count )
{
for( T* p = data + 1; p < data + count; ++p )
if( p[-1] > p[0] ) return false;
return true;
}
void main()
{
const int data[] = { -5, 4, 6, 8, 12 };
const int count = sizeof(data)/sizeof(data[0]);
assert( true == test_sorted( data, count ) );
}
3-я задача: найти минимальную цифру восьмиричного или десятичного числа
Код:
int min_digit( int value, int radix = 10 )
{
char buf[128];
itoa( std::abs( value ), buf, radix );
char* p = std::min( buf, buf + strlen(buf) );
return *p - '0';
}
{
char buf[128];
itoa( std::abs( value ), buf, radix );
char* p = std::min( buf, buf + strlen(buf) );
return *p - '0';
}
4-я задача: найти максимальный общий делитель массива чисел
Код:
bool mod_lesser( int v1, int v2) { return abs(v1) < abs(v2); }
struct CheckFactor
{
const int m_factor;
CheckFactor( int factor ) : m_factor(factor) {}
bool operator ()( int v ) const { return 0 != (v % m_factor); }
};
int get_common_factor( const int* data, int count )
{
const int* pEnd = data && count > 0 ? data + count : data;
const int* pMin = min_element( data, pEnd, mod_lesser );
int factor = max( 1, abs(*pMin) );
while( factor > 1 &&
pEnd != find_if( data, pEnd, CheckFactor(factor) ) ) --factor;
return factor;
}
void main()
{
const int data[] = { -10, 20, 15, 100, -50 };
const int count = sizeof(data)/sizeof(data[0]);
assert( 5 == get_common_factor( data, count ) );
}
struct CheckFactor
{
const int m_factor;
CheckFactor( int factor ) : m_factor(factor) {}
bool operator ()( int v ) const { return 0 != (v % m_factor); }
};
int get_common_factor( const int* data, int count )
{
const int* pEnd = data && count > 0 ? data + count : data;
const int* pMin = min_element( data, pEnd, mod_lesser );
int factor = max( 1, abs(*pMin) );
while( factor > 1 &&
pEnd != find_if( data, pEnd, CheckFactor(factor) ) ) --factor;
return factor;
}
void main()
{
const int data[] = { -10, 20, 15, 100, -50 };
const int count = sizeof(data)/sizeof(data[0]);
assert( 5 == get_common_factor( data, count ) );
}
5-я задача: найти минимальное общее кратное
Код:
bool mod_lesser( int v1, int v2) { return abs(v1) < abs(v2); }
struct ValueCheck
{
const int m_multiple;
ValueCheck( int multiple ) : m_multiple(multiple) {}
bool operator ()( int v ) const { return !v || (m_multiple % v); }
};
int get_common_multiple( const int* data, int count )
{
const int* pEnd = data + count;
const int* pMin = min_element( data, pEnd, mod_lesser );
const int* pMax = max_element( data, pEnd, mod_lesser );
const int value = abs( *pMin * *pMax );
for( int i = 1; i <= value; ++i )
{
if( pEnd == find_if( data, pEnd, ValueCheck(*pMax*i) ) )
return abs( *pMax*i );
}
return 0;
}
void main()
{
const int data[] = { -2, 5, 7, -10 };
const int count = sizeof(data)/sizeof(data[0]);
assert( 70 == get_common_multiple( data, count ) );
}
struct ValueCheck
{
const int m_multiple;
ValueCheck( int multiple ) : m_multiple(multiple) {}
bool operator ()( int v ) const { return !v || (m_multiple % v); }
};
int get_common_multiple( const int* data, int count )
{
const int* pEnd = data + count;
const int* pMin = min_element( data, pEnd, mod_lesser );
const int* pMax = max_element( data, pEnd, mod_lesser );
const int value = abs( *pMin * *pMax );
for( int i = 1; i <= value; ++i )
{
if( pEnd == find_if( data, pEnd, ValueCheck(*pMax*i) ) )
return abs( *pMax*i );
}
return 0;
}
void main()
{
const int data[] = { -2, 5, 7, -10 };
const int count = sizeof(data)/sizeof(data[0]);
assert( 70 == get_common_multiple( data, count ) );
}
есть два типа переменных - цельные и дробные (int & double)
если поделить четное число на 2 - выйдет цельное
чтобы программа увидела где дробь а где цельное - сравниваем два деления разных типов переменных с одинаковыми значениями
если совпало - бинго, записываем в счетчик четных чисел
думается, есть еще несколько решений, зависит от стиля