九度OJ 1006:ZOJ问题 (递归)
2024-10-20 16:37:12
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:18621
解决:3197
- 题目描述:
-
对给定的字符串(只包含'z','o','j'三种字符),判断他是否能AC。
是否AC的规则如下:
1. zoj能AC;
2. 若字符串形式为xzojx,则也能AC,其中x可以是N个'o' 或者为空;
3. 若azbjc 能AC,则azbojac也能AC,其中a,b,c为N个'o'或者为空;
- 输入:
-
输入包含多组测试用例,每行有一个只包含'z','o','j'三种字符的字符串,字符串长度小于等于1000。
- 输出:
-
对于给定的字符串,如果能AC则请输出字符串“Accepted”,否则请输出“Wrong Answer”。
- 样例输入:
-
zoj
ozojo
ozoojoo
oozoojoooo
zooj
ozojo
oooozojo
zojoooo
- 样例输出:
-
Accepted
Accepted
Accepted
Accepted
Accepted
Accepted
Wrong Answer
Wrong Answer
思路:
从规则2 3来看,很明显需要用递归来解,不算难,但是边界条件判断容易出错。
我WA了几次才通过的。
代码:
#include <stdio.h> #define N 1000 int main(void)
{
int i, a, b, c;
char s[N+1]; while (scanf("%s", s) != EOF)
{
a = b = c = 0;
i = 0;
while (s[i] == 'o')
{
i ++;
a ++;
}
if (s[i] != 'z')
{
printf("Wrong Answer\n");
continue;
}
i++;
while (s[i] == 'o')
{
i ++;
b ++;
}
if (s[i] != 'j')
{
printf("Wrong Answer\n");
continue;
}
i++;
while (s[i] == 'o')
{
i ++;
c ++;
}
if (s[i] != '\0')
{
printf("Wrong Answer\n");
continue;
} //if (c == a+a*(b-1) && b > 0)
while (b > 1)
{
b --;
c -= a;
}
if (a == c && a >= 0 && b == 1)
printf("Accepted\n");
else
printf("Wrong Answer\n");
} return 0;
}
/**************************************************************
Problem: 1006
User: liangrx06
Language: C
Result: Accepted
Time:30 ms
Memory:912 kb
****************************************************************/
最新文章
- IOS开发之WIFI及IP相关
- 2016 - 1 - 23 json解析
- 谈谈CSS预处理技术中for循环的应用-CSS Sprite
- PHP中file_put_contents追加和换行
- iOS 10 消息推送(UserNotifications)秘籍总结(一)
- (六)学习MVC之标签a提交页面
- 解决Asp.net中的Chart控件运行出现错误提示“ ChartImg.axd 执行子请求时出错”
- careercup-栈与队列 3.6
- FC8下备份linux系统
- Why GEMM is at the heart of deep learning
- Spring实战——XML和JavaConfig的混合配置
- Vue keep-alive实践总结
- git的理论基础
- Golang错误和异常处理的正确姿势
- As-If-Serial 理解
- JAVA EE------XML
- conts、var 、let的区别
- 如何使用 Visual C# .NET 处理 Excel 事件
- springmvc转页面
- sqli-labs(八)——修改密码处sql注入+http头sql注入