观察样例可知,相邻的每个字母之间存在2倍的关系,不难想到利用二进制来处理,a=1,b=2,c=4,d=8......将输入的数据转化为二进制数,然后就可以判断该位置是否存在一个字母,即是二进制的第i位是否有1。

#include <iostream>
#include <queue>
#include <map>
#include <set>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <iomanip>
#include <stack>
#include <numeric>
#include <ctime>
#include <string>
#include <bitset>
#include <unordered_map>
#include <unordered_set>

using namespace std;
using ll = long long;
const ll N = 1e6 + 5, mod = 1e9 + 7, inf = 0x3f3f3f3f;

int n;

string find(int n) {
    string ans = "";

    while (n) {
        ans += ((n & 1) ? "1" : "0");
        n >>= 1;
    }

    //reverse(ans.begin(),ans.end());

    return ans == "" ? "0" : ans;
}

void solve() {
    cin >> n;

    map<int, char>ans;

    //ans[1]='a';

    for (int i = 0; i < 26; i++) {
        ans[pow(2, i)] = 'a' + i;
    }

    string a = find(n); //二进制

    for (int i = 0; i < a.size(); i++) {
        if (a[i] == '1') {
            cout << ans[pow(2, i)];
        }
    }

}

int main() {
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);

    int t = 1;
    //cin>>t;

    while (t--) {

        solve();

    }

    return 0;
}