牛客網拼多多面試題:
多多君最近在研究某種數字組合:
定義為:每個數字的十進制表示中(0~9),每個數位各不相同且各個數位之和等於N。
滿足條件的數字可能很多,找到其中的最小值即可。
多多君還有很多研究課題,於是多多君找到了你--未來的計算機科學家尋求幫助。
輸入描述:
共一行,一個正整數N,如題意所示,表示組合中數字不同數位之和。
(1 <= N <= 1,000)
輸出描述:
共一行,一個整數,表示該組合中的最小值。
如果組合中沒有任何符合條件的數字,那么輸出-1即可。
輸入例子1:
5
輸出例子1:
5
例子說明1:
符合條件的數字有:5,14,23,32,41
其中最小值為5
輸入例子2:
12
輸出例子2:
39
例子說明2:
輸入例子3:
50
輸出例子3:
-1
例子說明3:
沒有符合條件的數字 (T▽T)
-------------------------
解析:題目45以下就會有重復即1+2+3+4+5+6+7+8+9;保證最小即按照最大在低位進行計算。
代碼如下:
#include<cstdio> #include<cmath> #include<cstring> #include<algorithm> #include<map> using namespace std; int main() { int n; scanf("%d", &n); if (n > 45) { printf("-1\n"); return 0; } int ans[20], cnt = 0, pp = 9; map<int, int> mp; while(n != 0) { if (mp[pp] == 0 && n >= pp) { ans[cnt] = pp; mp[pp] = 1; n = n - pp; cnt++; } pp--; } for (int i = cnt-1; i >= 0; i--) { printf("%d", ans[i]); } printf("\n"); return 0; }
