给定一个正整数,请你找到最大的正整数,满足该正整数所有数位之和等于,且每个数位都不相等(每个数位不能是0)。 举个例子,如果,那么答案是421。因为4+2+1=7,且每个数位都不相等。
区块链毕设网qklbishe.com为您提供问题的解答
给定一个正整数,请你找到最大的正整数,满足该正整数所有数位之和等于,且每个数位都不相等(每个数位不能是0)。
举个例子,如果,那么答案是421。因为4+2+1=7,且每个数位都不相等。
#include<bits/stdc++.h> using namespace std; vector<string> v; string s = ""; void dfs(int i, int n, int sum) { if(i >= 10) { if(sum == n) { v.push_back(string(s)); } return ; } if(sum > n) { return ; } if(n - sum > (i + 9) * (10 - i) / 2) return ; dfs(i + 1, n, sum); s += (i + '0'); dfs(i + 1, n, sum + i); s.pop_back(); } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; if(n > 45) { cout << -1 << 'n'; return 0; } dfs(1, n, 0); if(v.size() == 0) { cout << -1 << 'n'; } else { sort(v[0].begin(), v[0].end(), greater<char>()); string res = v[0]; for(int i = 1;i < v.size();i++) { if(res.size() < v[i].size()) { sort(v[i].begin(), v[i].end(), greater<char>()); res = v[i]; } else if(res.size() == v[i].size()) { sort(v[i].begin(), v[i].end(), greater<char>()); if(res.compare(v[i]) < 0) { res = v[i]; } } } cout << res << 'n'; } return 0; }
06:30
以上就是关于问题给定一个正整数,请你找到最大的正整数,满足该正整数所有数位之和等于,且每个数位都不相等(每个数位不能是0)。
举个例子,如果,那么答案是421。因为4+2+1=7,且每个数位都不相等。的答案
欢迎关注区块链毕设网-
专业区块链毕业设计成品源码,定制。
区块链NFT链游项目方科学家脚本开发培训