英雄会 15 无穷字符串

1 篇文章 0 订阅

/****

假设字符串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 //提示:自动阅卷结束唯一标识,请勿删除或增加。

 

/*******

经过多次失败才通过,没有得分,看来还是需要多加训练

********/

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值