头文件整理:
1、strlen 要用头文件cstring
2、scanf 要用头文件#include <stdio.h>
递归练习
- hdu 1274
#include<stdio.h>
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 255;
int n;
int len = 0;
char s[maxn];
int isdigit(char x){
return (x >= '0') && (x <= '9') ;
}
int extend(int p){
while((s[p] != ')')&&(p < len)){
int k = 0;//k用来统计一共数字
while(isdigit(s[p])){
k = k * 10 + s[p ++]-'0';
}
if(k == 0){
k = 1;
}
int x = -1;
while(k --){
if(s[p] == '('){
x = extend(p+1);
}
else{
printf("%c",s[p]);
}
}
if(x != -1){
p = x;
}
p ++;
}
return p;
}
int main(){
scanf("%d",&n);
while(n --){
scanf("%s",&s);
len = strlen(s);
extend(0);
printf("\n");
}
return 0;
}
- hdu2064
#include <iostream>
#include <stdio.h>
int num;
long long Hano(int x){
if(x == 1){
return 2;
}
else{
return 3*Hano(x-1) + 2;
}
}
int main(){
while(scanf("%d",&num)!= EOF){
long long ans = Hano(num);
printf("%lld\n",Hano(num));
}
return 0;
}
- lqb
题目:
描述:正则问题
考虑一种简单的正则表达式:
只由 x ( ) | 组成的正则表达式。
小明想求出这个正则表达式能接受的最长字符串的长度。
例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是: xxxxxx,长度是6。
输入
一个由x()|组成的正则表达式。输入长度不超过100,保证合法。
输出
这个正则表达式能接受的最长字符串的长度。
例如,
输入:
((xx|xxx)x|(x|xx))xx
程序应该输出:
6
资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。
注意:
main函数需要返回0;
只使用ANSI C/ANSI C++ 标准;
不要调用依赖于编译环境或操作系统的特殊函数。
所有依赖的函数必须明确地在源文件中 #include
不能通过工程设置而省略常用头文件。
提交程序时,注意选择所期望的语言类型和编译器类型。
#include<cstring>
#include<stdio.h>
const int maxn = 105;
char s[maxn];
int p = 0;
int len;
int countnum(){
int ans = 0;
int left = 0;
int right = 0;
int flag = 0;//flag = 0 表示在|左边,flag = 1表示在|右边
while(p < len){
if(s[p] == '('){
p ++;
if(flag == 0){
left += countnum();
}
else{
right += countnum();
}
}
else if(s[p] == '|'){
flag = 1;
}
else if(s[p] == ')'){
return (left > right)?left:right;
}
else if(s[p] == 'x'){
if(flag == 0){
left ++;
}
else {
right ++;
}
}
p ++;
}
return (left > right)?left:right;
}
int main(){
scanf("%s",&s);
len = strlen(s);
printf("%d\n",countnum());
return 0;
}
- hdu 2013
题目:第一天悟空吃掉桃子总数一半多一个,第二天又将剩下的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第n天准备吃的时候只剩下一个桃子。聪明的你,请帮悟空算一下,他第一天开始吃的时候桃子一共有多少个呢?
输入:输入数据有多组,每组占一行,包含一个正整数n(1<n<30),表示只剩下一个桃子的时候是在第n天发生的。
输出:对于每组输入数据,输出第一天开始吃的时候桃子的总数,每个测试实例占一行。
#include<stdio.h>
int n;
int count(int d){
if(d == 1){
return 1;
}
else return 2*(count(d-1) + 1);
}
int main(){
while(scanf("%d",&n) != EOF){
printf("%d\n",count(n));
}
return 0;
}
- hdu 2044
#include<stdio.h>
#include<cstring>
const int maxn = 55;
int n;
int a,b;
long long graph[maxn];
int main(){
memset(graph,0,sizeof(graph));
graph[1] = 1;
graph[2] = 2;
for(int i = 3;i < maxn;i ++){
graph[i] = graph[i-1] + graph[i-2];
}
scanf("%d",&n);
while(n -- ){
scanf("%d %d",&a,&b);
printf("%lld\n",graph[b-a]);
}
return 0;
}