Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Решите на C++ пожалуйста

Влад Иванов Ученик (93), на голосовании 4 месяца назад
The infinite sequence of numbers A(1), A(2) ... is under construction as follows:
 A (1) =0.
 Let elements A(1), A(2) ..., A(3m

) are constructed. Then elements A(3m

+1), ..., A(3

m+1) accept

values
A(3m
)+3m
, A(3m
- 1)+3m
,...,A(1)+ 3
m
, A(1)+2*3
m
, A(2)+2*3m
,...,A(3
m
) +2*3m

accordingly.
Write the program which on set N finds A(N).

Input
The input contains number N (1 <= N <= 1,000,000,000).

Output
You are to deduce A(N).
Голосование за лучший ответ
Татьяна Просветленный (36384) 5 месяцев назад
 #include  
#include
using namespace std;

int main() {
long long N;
cin >> N;

// Основной цикл, чтобы найти значение A(N)
long long power = 1, sum = 0, base = 0;
while (power * 3 < N) {
base += power;
sum += power * 3;
power *= 3;
}

// Нахождение правильного значения A(N)
if (N <= sum + power) {
cout << base + (N - sum - 1) / power << endl;
} else if (N <= sum + 2 * power) {
cout << base + (N - sum - power - 1) / power + power << endl;
} else {
cout << base + (N - sum - 2 * power - 1) / power + 2 * power << endl;
}

return 0;
}
Тадасана Просветленный (41316) 5 месяцев назад
Это зашибись, но если задачу сперва математически чуть упростить, получится, что
A(n) = n - 1.
Кстати, это и не скрывается - посмотри на sample input/sample output.

Нужны какие-то понятные правила игры, Насколько математику можно применять при написании программы? Писать программу, которая выплевывает число на 1 меньше введенного, не очень интересно. А полностью запрещать использовать математику тоже ведь нельзя, при таком жестком запрете ни одну программу не напишешь.

PS. Ладно, лови прогу.
https://ideone.com/bk903A
Ввод сам прикрутишь
Влад ИвановУченик (93) 5 месяцев назад
НУ как бы это только один тест был, другие то не так)
Похожие вопросы