这题挺坑的,我还没填完坑
#include <iostream>
#include<stdlib.h>
#include<string>
#include<vector>
#include<math.h>
typedef long long ll;
using namespace std;
ll maxNumber2(vector<int>& nums1, vector<int>& nums2, int k,int i,int j) {
if (k==0)
return 0;
int N = nums1.size();
int M = nums2.size();
ll maxnum = -1;
int max1 = -1;
int max2 = -1;
int flag = -1;
int s1, s2;
for ( int n = i; n < N; n++)
if (N - n + M - j >= k&&max1 < nums1[n]) {
max1 = nums1[n];
s1 = n;
}
for (int m = j; m < M;m++)
if (N - i + M - m >= k&&max2 < nums2[m]) {
max2 = nums2[m];
s2 = m;
}
//cout<<"i:" << i << " j:" << j << endl;
//cout <<"k:"<<k<<" " <<"max1: " << max1 << " " << "max2: " << max2 << endl;
if (max1 != max2) {
flag = max1 > max2 ? 1 : 2;
if (flag == 1) {
//cout << "flag==2" << endl;
maxnum = max1*pow(10, k - 1) + maxNumber2(nums1, nums2, k - 1, s1 + 1, j);
}
else {
//cout << "flag==2" << endl;
maxnum = max2*pow(10, k - 1) + maxNumber2(nums1, nums2, k - 1, i, s2 + 1);
}
}
else {
//cout << "flag==-1" << endl;
maxnum = max(maxNumber2(nums1, nums2, k - 1, s1 + 1, j), maxNumber2(nums1, nums2, k - 1, i, s2 + 1));
maxnum = max1*pow(10, k - 1) + maxnum;
}
cout << "maxnum:" << maxnum << endl;
return maxnum;
}
vector<int> maxNumber(vector<int>& nums1, vector<int>& nums2, int k) {
vector<int>result;
ll maxnum=maxNumber2(nums1, nums2, k, 0, 0);
cout << maxnum << endl;
for (int i = 0; i < k; i++) {
result.push_back(maxnum / (ll)pow(10, k - i - 1));
maxnum %= (ll)pow(10, k - i - 1);
}
return result;
}
int main() {
//[2, 5, 6, 4, 4, 0]
//[7, 3, 8, 0, 6, 5, 7, 6, 2]
//15
//[7, 9, 0, 4, 7, 0, 7, 1, 2, 9, 5]
//[9, 1, 5, 8, 3, 9]
//17
vector<int>nums1 = { 7, 9, 0, 4, 7, 0, 7, 1, 2, 9, 5 };
vector<int>nums2 = { 9, 1, 5, 8, 3, 9 };
int k =16; //5;
vector<int>result = maxNumber(nums1, nums2, k);
for (int i = 0; i < result.size(); i++)
cout << result[i] << " ";
system("pause");
return 0;
}