Запишем 32 в двоичной системе:
32₁₀ = 100000₂
Возможный результат алгоритма(двоичная запись числа R) всегда имеет чётное число разрядов, в которой чётное число 1 и чётное число 0.
Тогда минимально возможное подходящее число будет 110000₂ = 32 + 16 = 48
Ответ: 48.
#include <iostream>
using namespace std;
void get_odd_even_divisors(int n, int &odd, int &even){
odd = 0;
even = 0;
for (int i=1; i<=n; i++)
if (n % i == 0){
if (i % 2 == 1) odd++;
else even++;
}
}
int main() {
int n, k1, k2;
cin >> n;
get_odd_even_divisors(n, k1, k2);
cout << "odd = " << k1 << " even = " << k2;
return 0;
}
Пример:
24
<span>odd = 2 even = 6</span>
//Если надумаешь менять расположение файла, то не забудь поменять его также в коде
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
const int ValueOfString = 10;
ofstream Writer;
Writer.open("C:\\Test\\First.txt", ios::out);
Writer « "Stroka1" « "\n";
Writer « "Stroka12" « "\n";
Writer « "Stroka133" « "\n";
Writer « "Stroka1444" « "\n";
Writer « "Stroka155" « "\n";
Writer « "Stroka16" « "\n";
Writer « "Stroka1" « "\n";
Writer « "Stroka17" « "\n";
Writer « "Stroka188" « "\n";
Writer « "Stroka1999" « "\n";
Writer.close();
ifstream Reader;
Reader.open("C:\\Test\\First.txt");
string Str[ValueOfString];
int NumInStr[ValueOfString] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int counter = 0;
while (!Reader.eof())
{
Reader » Str[counter];
counter++;
}
Reader.close();
string Tmp;
int counter2 = 0;
for (int i = 0; i < ValueOfString; i++)
{
Tmp = Str[i];
for (int j = 0; j < Tmp.length(); j++)
{
if (Tmp[j] == '1' || Tmp[j] == '2' || Tmp[j] == '3' || Tmp[j] == '4' || Tmp[j] == '5' || Tmp[j] == '6' || Tmp[j] == '7' || Tmp[j] == '8' || Tmp[j] == '9')
counter2++;
}
NumInStr[i] = counter2;
counter2 = 0;
}
ofstream Writer2;
Writer2.open("C:\\Test\\Second.txt", ios::app);
Writer « "\n";
for (int k = 0; k < ValueOfString; k++)
Writer2 « "\nВ " « k + 1 « " строке: " « NumInStr[k] « " цифр";
Writer2.close();
cout « "Operation successfully completed!" « endl « endl;
return 0;
}