title: C++奥赛一本通刷题记录(递归)
date: 2017-11-09
tags:

  • 一本通
  • openjudege
    categories: OI

C++奥赛一本通刷题记录(递归)

2017.11.9 By gwj1139177410

  1. 逆波兰表达式 openjudge1696

    //栈比较坑。。。
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<math.h>
    char a[3010];
    double trans(){ //float is bugsscanf("%s",a);if(strlen(a)==1){if(a[0]=='+')return trans()+trans();if(a[0]=='-')return trans()-trans();if(a[0]=='*')return trans()*trans();if(a[0]=='/')return trans()/trans();}else{return atof(a);}
    }
    int main(){printf("%f\n", trans());return 0;
    }
    
  2. 全排列 openjudge1750

    //直接套模板,据说STL也能水
    #include<cstdio>
    #include<cstring>
    const int maxn = 110;
    char a[maxn], b[maxn];
    int n, vis[maxn];
    void dfs(int cur){if(cur == n){for(int i = 0; i < n; i++)putchar(b[i]);printf("\n");}else for(int i = 0; i < n; i++){if(!vis[i]){vis[i] = 1;b[cur] = a[i];dfs(cur+1);vis[i] = 0;}}
    }
    int main(){scanf("%s", a); n = strlen(a);dfs(0);return 0;
    }
    
  3. 分解因数 openjudge1751

    //这题我第一个想法是排列组合,数论,然后。。。。
    #include<iostream>
    using namespace std;
    int f(int n, int m){ //找n的分解方案数if(n == 1)return 0;int ans = 1; //加上题目自己算一个值for(int i = m; i*i <= n; i++)//枚举n的每个约数,每次除掉(从小到大去重)if(n%i==0)ans += f(n/i,i);return ans;
    }
    int main(){int T;  cin>>T;while(T--){int n;  cin>>n;cout<<f(n,2)<<"\n";//找约数从2开始}return 0;
    }
    
  4. 斐波那契数列 openjudge1755

    //╮( ̄▽ ̄)╭数据太水我也没办法
    #include<iostream>
    using namespace std;
    int f(int n){return n==1||n==2?1:f(n-1)+f(n-2);
    }
    int main(){int T;  cin>>T;while(T--){int n;  cin>>n;cout<<f(n)<<"\n";}return 0;
    }
    
  5. pell数列 openjudge1788

    //(⁄ ⁄•⁄ω⁄•⁄ ⁄)这个没有记忆化药丸了
    #include<iostream>
    using namespace std;
    int f[1000010];
    int fn(int n){return f[n]?f[n]:f[n]=(2*fn(n-1)+fn(n-2))%32767;
    }
    int main(){f[1]=1; f[2]=2;int T;  cin>>T;while(T--){int n;  cin>>n;cout<<fn(n)<<"\n";}return 0;
    }
    
  6. 括号匹配问题 openjudge2705

    //模拟题一番水
    #include<iostream>
    #include<string>
    #include<stack>
    using namespace std;
    int main(){string s, t;stack<int>sk, tk;while(getline(cin,s)){t.resize(s.size());for(int i = 0; i < s.size(); i++){t[i] = ' ';if(s[i]=='(')sk.push(i);if(s[i]==')'){if(sk.size())sk.pop();else tk.push(i);}}while(sk.size()){t[sk.top()] = '$';sk.pop();}while(tk.size()){t[tk.top()] = '?';tk.pop();}cout<<s<<"\n"<<t<<"\n";}return 0;
    }
    
  7. 爬楼梯 openjudge3089

    #include<iostream>
    using namespace std;
    int a[50];
    int f(int n){return a[n]?a[n]:a[n]=f(n-1)+f(n-2);
    }
    int main(){a[1]=1; a[2]=2; //稍微注意一下边界就好啦int n;while(cin>>n){cout<<f(n)<<"\n";}return 0;
    }
    
  8. 汉诺塔问题 openjudge6261

    //这种就是经常出现在初赛看程序写结果里面的
    //ha2():将n个盘子从a经过c移动到b
    #include<iostream>
    using namespace std;
    void ha2(int n, char a, char b, char c){if(!n)return ;ha2(n-1,a,c,b); //把前n-1个盘子移动到辅助的杆ccout<<a<<"->"<<n<<"->"<<b<<"\n";//然后把自己移动到目标杆bha2(n-1,c,b,a);//最后再把前n-1个盘子通过辅助的杆a辅助移动到目标杆b
    }
    int main(){int n; char a, b, c;cin>>n>>a>>b>>c;ha2(n,a,b,c);return 0;
    }
    
  9. 放苹果 openjudge666

    //已经很水啦,貌似递推做过呢
    #include<iostream>
    using namespace std;
    int f(int m, int n){if(m==0 || n==1)return 1;return n>m?f(m,m):f(m,n-1)+f(m-n,n);
    }
    int main(){int T;  cin>>T;while(T--){int m, n;  cin>>m>>n;cout<<f(m,n)<<"\n";}return 0;
    }
    
  10. 求最大公约数问题 openjudge7592

    #include<iostream>
    using namespace std;
    typedef long long LL;
    LL gcd(LL a, LL b){return !b?a:gcd(b,a%b);
    }
    int main(){LL a, b;  cin>>a>>b;cout<<gcd(a,b)<<"\n";return 0;
    }
    
  11. 2的幂次方表示 openjudge8758

    //直接模拟就好啦
    #include<iostream>
    using namespace std;
    void dfs(int dep, int n){//if(n<=2){ cout<<n; return; }int flag = 0;for(int i = dep; i >= 0; i--){if(n&(1<<i)){if(flag)cout<<"+";if(i == 1)cout<<2;else if(i==0||i==2)cout<<"2("<<i<<")";//等价于边界条件else{cout<<"2(";dfs(dep,i);cout<<")";}flag = 1;}}
    }
    int main(){int n;  cin>>n;  dfs(30,n);return 0;
    }
    
  12. 分数求和 openjudge12

    //gcd&lcm
    #include<iostream>
    using namespace std;
    int gcd(int a, int b){return !b?a:gcd(b,a%b);
    }
    int lcm(int a, int b){return a/gcd(a,b)*b;
    }
    int main(){int a=0, b=1;int T;  cin>>T;while(T--){int c, d; cin>>c; cin.get(); cin>>d;int t = lcm(b,d);a = a*(t/b)+c*(t/d);  b = t;while((t=gcd(a,b))!=1){a/=t; b/=t;}}if(b==1||a==0)cout<<a<<"\n";else cout<<a<<"/"<<b<<"\n";return 0;
    }
    
  13. 因子分解 openjudge22

    #include<iostream>
    using namespace std;
    int main(){int n, flag=0;  cin>>n;for(int i = 2; i <= n; i++){int cnt = 0;while(n%i==0){n /= i;  cnt++;}if(cnt){if(flag)cout<<"*";if(cnt==1)cout<<i;else cout<<i<<"^"<<cnt;flag = 1;}}return 0;
    }
    
  14. 判断元素是否存在 openjudge41

    //感觉有点绕,拿set水了
    #include<iostream>
    #include<set>
    using namespace std;
    set<int>s;
    int main(){int k, x, t;  cin>>k; cin.get(); cin>>x;s.insert(k); t = k; int cnt = 0;for(set<int>::iterator it = s.begin(); it!=s.end(); it++){s.insert(2*(*it)+1); s.insert(3*(*it)+1);if(*(--s.end())>x)cnt++;if(cnt>1000)break;//强行搞事情}if(s.count(x))cout<<"YES\n";else cout<<"NO\n";return 0;
    }
    
    //开个玩笑的,不过这也算递归?
    #include<iostream>
    using namespace std;
    const int maxn = 300010;
    int a[maxn];
    void enlarge(int x){if(x<maxn){a[x] = 1;enlarge(2*x+1);enlarge(3*x+1);}else return ;
    }
    int main(){int k, x;  cin>>k; cin.get(); cin>>x;enlarge(k);if(a[x])cout<<"YES\n";else cout<<"NO\n";return 0;
    }
    

C++奥赛一本通递归题解相关推荐

  1. C++奥赛一本通贪心题解

    C++奥赛一本通刷题记录(贪心) 2017.11.15 By gwj1139177410 书不见了,占坑待填. An Easy Problem poj2453 //贪心, 将最右边第一个01改成10并 ...

  2. C++奥赛一本通排序题解

    title: C++奥赛一本通刷题记录(排序) date: 2017-11-16 tags: 一本通 openjudege categories: OI C++奥赛一本通刷题记录(排序) 2017.1 ...

  3. 【信息学奥赛一本通】题解大全

    信息学奥赛一本通网站:点击这里 [语言及算法基础篇] 第一部分:C++语言 第一章:C++语言入门 T1000    入门测试题目      点击这里 T1001    Hello,World!    ...

  4. c++信息学奥赛一本通1318题解

    1318:[例5.3]自然数的拆分 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 26590 通过数: 15724 [题目描述] 任何一个大于1的自然数n,总可以拆分成若干个小于 ...

  5. 信奥赛一本通 C++题解 1072 鸡尾酒疗法

    1072:鸡尾酒疗法 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 72535     通过数: 31800 [题目描述] 鸡尾酒疗法,指"高效抗逆转录 ...

  6. 信奥赛一本通 C++题解 2036【例5.3】开关门

    2036:[例5.3]开关门 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 14030     通过数: 8796 [题目描述] 宾馆里有n(2≤n≤1000) ...

  7. 信息学奥赛一本通(题解目录)

    信息学奥赛一本通(题解目录) 记录了我从初学者到逐渐熟悉c++的成长之路 信息学奥赛一本通OJ 目录 信息学奥赛一本通(题解目录) 前言 一.语言及算法基础篇 基础(一) C++语言 第一章 C++语 ...

  8. 信息奥赛一本通 三角形最佳路径问题 (1288) 题解

    信息奥赛一本通 三角形最佳路径问题 (1288) 题解 时间限制: 1000 ms 内存限制: 65536 KB 题目描述 如下所示的由正整数数字构成的三角形: 7 3 8 8 1 0 2 7 4 4 ...

  9. 信息学奥赛一本通1114:白细胞计数 视频题解

    信息学奥赛一本通1114:白细胞计数 视频题解 1114:白细胞计数 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 38224 通过数: 12593 [题目描述] 医院采样了某临 ...

最新文章

  1. sklearn 安装_sklearn-classification_report
  2. 再谈要不要成为全栈工程师
  3. Qt文档阅读笔记-Transformations解析及例子
  4. 国内三巨头为什么那么成功
  5. DotNet中的集合对象(2): Hashtable
  6. win7,8走网络打印机出现删除设备和打印机门未关闭的解决方法
  7. Android app内存管理的16点建议
  8. doc.project java_GitHub - kanghaimeng/idoc: Generate doc for java maven project.(java 项目自动生成文档)...
  9. 自建dnspod解析服务器,利用DNSPOD配置智能解析双线服务器
  10. java数据结构与算法总结(二十四)--RoaringBitmap数据结构及原理
  11. 没错,我在用JBOD,它真的很好
  12. JavaScript数据类型 - String类型
  13. python expect模块pexpect简单应用
  14. 题解报告——聪聪与可可
  15. 诵读中国大赛网络评选投票微信图文投票怎么制作怎么制作投票页面
  16. python打印实心正方形
  17. 基于SPSS的K均值算法
  18. Linux libvirt目录,在Linux系统上使用Vagrant和Libvirt的方法
  19. linux无线wps连接wifi,通过Wi-Fi保护的设置(WPS)设置无线连接在RV系列路由器
  20. 拉普拉斯特征映射(Laplacian Eigenmaps, LE)

热门文章

  1. matlab 求解线性规划问题
  2. VS2013 MFC 直接将 OpenCV2.0/3.0 库中的 Mat 结构的图像传递到 Picture Control(图片控件)
  3. C++基础——函数模板
  4. 计算机设计大赛西北地区赛,我校学生在中国大学生计算机设计大赛西北地区赛中获佳绩...
  5. python从入门到精通pdf清华大学出版社-python从入门到精通 清华大学出版社
  6. 语音识别技术的发展历程,语音识别是如何工作的?语音识别资料概述
  7. 盘点语音识别技术在人工智能中的应用
  8. 带桭字的名字_带芙字的名字 好名字从出生就伴随我们一生 必须雅致
  9. 【动态规划】P1220:区间dp:关路灯
  10. 数据结构笔记:二叉树的构造(根据遍历顺序构造二叉树)