2016年12月9日 星期五

[UVa]1584 - Circular Sequence

個人難度評分:★☆☆☆☆
題目在此

這題的題目是要用ACGT四個字母自由排列(2<長度<100),並且那是環狀排列
而我們要做的是取出排列最小的方式(照字典序)

這題參考自BruceLee's UVAsillyhair

首先先把給的環狀資料,每個排列方式都排一次
這裡用到了string::substr(_startpos_, _endpos_)這個函式,可以切一部分的string出來
若裡面只有一個數字,則是從該數字切到結尾

再來就是比較哪個最小
而直接比較string的特性,正好就是以字典序來比較,所以我們直接拿string做比較

以下為解
//UVa 1584
#include <iostream>
using namespace std;
int main(){
	int t;
	string data, result, excdata;
	cin >> t;
	while(t--){
		cin >> data;
		result = data;
		for(int i=0; i<data.length(); i++){
			excdata = data.substr(i)+data.substr(0,i);
			if(excdata<result){
				result=excdata;
			}
		}
		cout << result <<endl;
	}
}

沒有留言:

張貼留言