/****
假设字符串A=“^__^" (4个字符),B="T.T"(3个字符),我们进行如下步骤: (1) 把A接到B的后面得到字符串C (按样例C="T.T^__^") (2) 令A=B,B=C 不断重复步骤(1)(2)得到的字符串是无穷的。 求这个串的第n个字符。(0<n<2^63)
挑战规则:
main函数可不用完成。
********/
#include <stdio.h>
/***** 常量字符串连接 ********/
#define link_str(a,b) a b
#define A "^__^"
#define B "T.T"
#define C link_str(B,A)
#define D link_str(C,B)
#define E link_str(D,C)
long long nthstrlen(long long n)
{
long long a = 4;
long long b = 3;
long long c = a + b;
while(n> 1)
{
a = b;
b = c;
c = a + b;
n--;
}
return c;
}
/******** 求出 第 n 次 字符串连接 得到的字符串的 第m 个字符*********/
char nth_str_mchar(long long n,long long m){
long long len;
while(n> 3){
len = nthstrlen(n-1);
if(m <= len) --n;
else {n -= 2; m -= len ;}
}
switch(n){
case 1:return C [(int) m-1];break;
case 2:return D [(int) m-1];break;
case 3:return E [(int) m-1];break;
}
return 'A';
}
/********* 求串的第n个字符 ******/
char nthchar(long long n){
long long a = 4;
long long b = 3;
long long step = 1;/*** 字符串连接的次数(步数) ****/
long long c = a + b;
/**** 求经过多少次(step)字符串连接后,字符串中,有 不少于n个字符 *****/
while(n > c ){
a = b;
b = c;
c = a + b;
++step;
}
return nth_str_mchar(step,n);
}
//start 提示:自动阅卷起始唯一标识,请勿删除或增加。
int main()
{
printf("%c",nthchar(234732283321641875));
}
//end //提示:自动阅卷结束唯一标识,请勿删除或增加。
/*******
经过多次失败才通过,没有得分,看来还是需要多加训练
********/