题解 | #小红的字符生成#
小红的字符生成
https://www.nowcoder.com/practice/f8659377ca104b1aad45dd2fb564c940?tpId=376&tqId=2608571&ru=/exam/oj&qru=/ta/15-days-help/question-ranking&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E9%259D%25A2%25E8%25AF%2595%26topicId%3D376
题目解析:
a=a
b=aa
c=bb=aaaa
d=cc=bbbb=aaaa,aaaa
从而观察得到:
a=2^0*a
b=2^1*a
c=2^2*a
因此对于最少表达出n个a
也就是从1,2,4,8...2^t之中选最少的数求和来表示n
代码
#include "bits/stdc++.h" using namespace std; #define int long long #define endl "\n" #define PII pair<int,int> #define PIII pair<int,PII> const int MOD = 1e9 + 7; const int N = 3e5; void slu() { int n; cin >> n; string res; while (n) { int k = 0; while (pow(2, k) <= n)k++; k--; res.push_back(('a' + k)); n -= pow(2, k); } cout << res; } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int T; // cin >> T; T = 1; while (T--)slu(); }