该题目的意思:两个b在一堆a里面不断地移动过,当两个b走到一起时,前面的b回向前移动一位后面的一个b回到最后面的位置,我们可有题目给的10种情况可得到规律前一个b 的位置变化为1,2,4,7……所以可以用一个数组将大量的数据装在一个数组里去判断第一个b出现的位置,再判断第二个b出现的位置。
代码如下:
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int arr[]=new int [300000];
arr[2]=1;
int x=1;
for(int i=3;i<arr.length-1;i++) {
arr[i]=arr[i-1]+x;
x++;
}
//System.out.println(arr[5]);
for(int t=sc.nextInt();t>0;t--) {
int n=sc.nextInt();
int m=sc.nextInt();
int a=0,b=0;
StringBuilder str=new StringBuilder("");
for(int i=0;i<arr.length;i++) {
if(m>=arr[i]&&m<arr[i+1]) {
a=i;
b=m-arr[i]+1;
//System.out.println(a+" "+b);
break;
}
}
for(int i=1;i<=n;i++) {
if(i==a||i==b) {
str=str.append("b");
}else {
str=str.append("a");
}
}
System.out.println(str.reverse());
}
}
改代码用String回出现超时