重邮2020复试题

有一个机器人站在一排长度为m+2的格子上,从左往右依次标号为0, 1, 2, 3, ..., m + 1。它现在位于第0个格子。第1个到第m个的每个格子上都分布着一个指令,要么为'L',要么为'R'。'L'表示如果机器人在这个格子,它只能选择向左跳跃;'R'表示如果机器人在这个格子,它只能选择向右跳跃。机器人在格子0只能选择向右跳跃。

这个机器人想到达格子m+1。机器人在开始跳跃之前,会选择一个正整数d并且每次跳跃最多跳跃d个格子,最少跳跃1个格子。一旦开始跳跃,这个正整数d就无法改变了。这意味着,假设机器人当前位于第i个格子,如果这个格子的指令是'L',那么机器人可以跳跃到的下一个格子的范围是[max(0, i - d),i-1];如果这个格子的指令是'R',那么机器人可以跳跃到的下一个格子的范围是[i+1, min(m+1, i+d)]。

由于机器人的能量是有限的,它每次并不想跳得太远。所以它希望选择一个最小的值d,能够让他从第0个格子经过若干次的跳跃之后到达第m+1个格子。跳跃的次数是没有限制的,只要机器人最终能到达第m+1个格子。而且指令的分布保证了一定可以找到至少一个满足条件的d值。

指令的输入格式为一个字符串s,长度为m。

你需要对t个不同的字符串s,输入满足条件的最小的d值。

编程实现上述问题。

d值就是机器人可以跳的最小的最远长度,比如指令是R,因为本来再m处要到m+1处所以输出d为1,同理LLR为3

#include<stdio.h>
#include<string.h>

int main(){
   int i,cnt,max=0;
   char  *a[4];
   char str[4][6]={"R","RRRR","LLR","RLLL"};
   char *p=a[0];
    for(i=0;i<4;i++){
       a[i]=str[i];     //将第i个字符串的首地址赋予指针数组a的第i个元素 ,即对指针数组初始化,不进行初始化程序会报错
    }
  for(i=0;i<4;i++){
       cnt=0;
       max=0;
        for(p=a[i];*p!='\0';p++){
             if(*p=='L'){
                  cnt++;
                  if(cnt>max) max=cnt;
          }else{          
               cnt=0;
          }
        }
        printf("%d\n",max+1);
   }
   return 0;
}

输出结果是对的,现在有一个小问题是怎么自己输入数组的值再定义数组长度,以下编译通过不了,

scanf("%d",&t);
   char  *a[t],
上一篇:C语言解决PTA1008 数组元素循环右移问题


下一篇:2022.1.14