對於給定數量的數字塊(塊數大於2且小於1000),打印最大可能數。來自給定數字塊的最大可能數C++
這裏有一個小例子:
輸入:
5 // Number of blocks of digits
9 // first block
98 // second
90 // third
5 // fourth
9 // fifth
輸出:
9998905 // The biggest possible number
我的工作在這個問題上一點點,我已經找到了算法,它似乎喜歡它的工作的任何組合,但我有問題,用C++編寫代碼
這裏的算法:
首先我輸入他們作爲一個字符串,因爲我可以muc更容易使用特定的數字。 然後我將每個數字的第一個數字與每個數字的第一個數字進行比較。並按升序排列。 如果第一個數字相同,我會檢查第二個數字,以此類推到最後一個數字。 如果兩個數字有不同的長度,而小的是另一個的子串,那麼我會在較大的數字前面排序。
正如我之前所說,這個算法工作正常,但我需要的代碼,因爲我有問題。
這是我的工作,直到如今
#include <iostream>
#include <string>>
using namespace std;
int main()
{
int nums, maxsl = 0;
cin >> nums;
string s[nums];
for(int i = 0; i<nums; i++)
{
cin >> s[i];
if(s[i].length() > maxsl)
{
maxsl = s[i].length();
}
}
for(int i = 0; i<nums; i++)
{
for(int j = 0; j<nums; j++)
{
for(int k = 0; k<=maxsl; k++)
{
if(k<=s[i].length() && k<= s[j].length())
{
if(s[i][k]>s[j][k])
{
string t = s[i];
s[i] = s[j];
s[j] = t;
}
}
else
{
if(s[i].length() > s[j].length())
{
string t = s[i];
s[i] = s[j];
s[j] = t;
}
}
}
}
}
for(int i = 0; i<nums; i++)
{
cout << s[i];
}
}
但是這些代碼只打印它們按升序排列,而不是最大數量更多鈔票。 這裏是前面例子的輸出:9890995
你嘗試過什麼?編寫代碼時,你會遇到什麼困難?你能告訴我們你寫的代碼嗎? –
Stackoverflow不在這裏分發代碼。這個問題將被關閉,除非你編輯它告訴我們你已經嘗試了什麼,以及你真正被困住的地方(「所有」都不是一個好的答案)。 – birryree
這是一個功課問題嗎? – g13n