1 条题解
-
0
C :
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char str[110]; while(scanf("%s",str) != EOF){ int loa, lob; for(int i = 0;i < strlen(str); i++){ if(str[i]=='a')loa = i; if(str[i]=='b')lob = i; } int st, en; if(loa<lob)st=loa, en=lob; else st=lob, en = loa; int ans = 0; int flag = 1; while(st<en && flag){ int i; int offset = 0; for(i = st;str[i]!='*';i++)offset++; for(int j = 1;j <= offset; j++)if(str[i+j]=='*')flag = 0; st = i + offset; ans++; } if(st>en)flag=0; flag?printf("%d\n",ans):printf("0\n"); } return 0; }
C++ :
#include <stdio.h> #include <string.h> char s[1000]; int count(int begin,int end)//计算begin到end所需的步数 {//向左跳再向右跳只能回到原位,所以直接考虑向右跳即可,向右跳的方法最多一种 int star,i,x; if(begin>=end) return 0; star=begin; while(star<end&&s[star]!='*')//找星号 star++; if(star*2>begin+end) return -9;//中间没有星号,不能到达 for(i=star+1;i<=star*2-begin;i++) if(s[i]=='*') return -9; x=count(i-1,end); if(x>=0) return x+1; else return -9; } void run() { int a=-1,b,n,i; n=strlen(s)-1; for(i=0;i<=n;i++)//跳的路线是可逆的,所以从a跳到b和从b跳到a等效,只考虑左往右即可 if(s[i]=='a'||s[i]=='b') { if(a==-1) a=i; else b=i; } i=count(a,b); if(i<0) printf("0\n"); else printf("%d\n",i); } int main() { while(scanf("%s",s)!=EOF) run(); return 0; }
- 1
信息
- ID
- 2185
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者