观察样例可知,相邻的每个字母之间存在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; }