【C/C++】3-6 環狀序列/陣列和字串/演算法競賽入門經典
阿新 • • 發佈:2020-11-04
【字典序比較】
對於兩個字串,比較字典序,從第一個開始,如果有兩位不一樣的出現,那麼哪個的ASCII碼小,就是字典序較小。如果都一樣,那麼短的小。
【題目】
輸入一個環狀串,輸出最小的字典序序列。
【程式碼】
#include <stdio.h> #include <stdlib.h> #include <string.h> const int maxn = 105; char input[maxn]; //環狀串s的表示法p是否比表示法q的字典序小 int less(const char* s, int p, int q) //比較p的字典序如果比q的字典序小,就輸出1;否則輸出0 //注意字典序要比較所有字母 { int n = strlen(s); for (int i = 0; i < n; i++) { if (s[(p+i)%n]!=s[(q+i)%n]) { return (s[(p+i)%n]<s[(q+i)%n]); } } return 0; } int main() { int T; scanf("%d",&T); for(int i = 0; i < T; i++) //T組資料 { scanf("%s",input); int ans = 0; int n = strlen(input); for (int j = 0; j < n; j++) //每一個順序打頭比較,找出最小的那個打頭位置 { if(less(input,j,ans)) ans = j; } for (int j = 0; j < n; j++){ printf("%c",input[(ans+j)%n]); //putchar(input[j+ans]%n); } putchar('\n'); } system("pause"); return 0; }