本人是小白,还请大神多多指教~
例子: 有一个长度为 n=3 的字符串 abc, 而环状的abc可以表示成 abc、bca、cab
如果程序要在 abc里面获取到 abc、bca、cab ,则
在a(包含a)开始向后读取3个字符串
在b(包含b)开始向后读取3个字符串
在c(包含c)开始向后读取3个字符串
b和c开始向后读取3个字符,读取超出数组范围怎么办?
可以看成为 abcabc 从第一个字符index=0 (index递增) 开始读取,每次读取长度len=3的字符串 就可以读取到abc、bca、cab
0 1 2 3 4 5
a b c a b c
例如 从c开始向后读取3个字符,读取到 c+1=3 的时候是只要 3 % 3 =0(即a的索引值)
读取到 c+2=4 的时候是只要 4 % 3 =1(即b的索引值)
这样就可以继续向后读取环状的字符了
可以看出 索引超过字符长度后 可以通过 (索引值%字符串长度) 得到前面的字符索引
#include<iostream>
using namespace std;
char s[100];
int n;
bool judge(int p,int q) {
int i;
for (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 i, k, minIndex = 0;
cin >> n;
k = n;
for (i = 0; i < n; i++)cin >> s[i];
while (k--) {
if (judge(n - k, minIndex))minIndex = n - k;
}
cout << minIndex;
return 0;
}