学会了打表找规律。m >= 3时abc循环最小,m=2时打表找规律即可。
ps:m>=3时,n%3,即多出来的数加在后面,加前面会令回文从3增加到4或5
#include <cstdio>
using namespace std;
int n, m;
int main(){
int t;
int num = 1;
scanf("%d", &t);
while(t--){
scanf("%d%d", &m, &n);
printf("Case #%d: ", num++);
if(m >= 3){
int x = n % 3;
for(int i = 0; i < n / 3; i++)
printf("abc");
if(x == 1)printf("a");
if(x == 2)printf("ab");
printf("\n");
continue;
}
if(m == 1){
for(int i = 0; i < n; i++)
printf("a");
printf("\n");
continue;
}
if(n == 1)printf("a");
else if(n == 2)printf("ab");
else if(n == 3)printf("aab");
else if(n == 4)printf("aabb");
else if(n == 5)printf("aaaba");
else if(n == 6)printf("aaabab");
else if(n == 7)printf("aaababb");
else if(n == 8)printf("aaababbb");
else if(n == 9)printf("aaaababba");
else {
printf("aaaa");
n -= 4;
while(n >= 6){
printf("babbaa");
n -= 6;
}
if(n == 1)printf("a");
else if(n == 2)printf("aa");
else if(n == 3)printf("bab");
else if(n == 4)printf("babb");
else if(n == 5)printf("babba");
}
printf("\n");
}
return 0;
}