貪心算法--最大整數問題

#include <iostream>
#include <string>
#include <sstream>
using namespace std;
string str[100]="";
string ChangeIntToString(int num){
	stringstream ss;
	string s;//用來放轉換成string的數值 
	ss<<num;//將int類型數組放入輸入流中 
	ss>>s;//從ss中抽取前面插入的int類型的值,並且賦予string類型 
	return s;//返回string類型的值 
}

string greedyMAX(int num[],int n){
	string strmax="";
	for (int i = 0; i < n; ++i) {
		str[i] = ChangeIntToString(num[i]);//把num數組中的每個值都變成string類型保存到str數組中 
	}
	for (int i = 0; i < n; ++i) {
		for (int j = i + 1; j < n; ++j) {//類似於冒泡算法,依次比較找出所有中string類型最大的 
			if ((str[i]+str[j]).compare(str[j] + str[i]) < 0) {//如果str[i]+str[j] 小於str[j]+str[i]則交換 
				string temp=str[i];
				str[i] = str[j];
				str[j] = temp;
			}
		}
	}
	for (int i = 0; i < n; ++i) {
		strmax += str[i];
	}
	return strmax;
}

int main(){
	int n;
	cout<<"請輸入整數的個數:";
	cin>>n;
	int num[n];
	cout<<"請輸入各整數:";
	for(int i=0;i<n;i++){
		cin>>num[i];
	}
	string res=greedyMAX(num,n);
	cout<<"最終結果爲:"<<res<<endl;
	return 0;
}

主要是轉換成string類型來做,不然單純用幾個排序的貪心算法,可能會出現錯誤,當然,可以嘗試用一下基數排序算法試試。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章