UVA110模拟出Pascal的8个数字的排序代码插入式递归
2015-09-23 22:24
447 查看
这题刚开始没想到,实际上就是排序,一直注意神奇的Pascal代码,想找规律来着,然而并没有找到,但实际上自己想一下排序的实质是什么,
就是一个一个的比较然后插入数组就可以了,然而这个题就是这样递归的,从小到大一直递归的最深层,然后从后往前一个数字一个数字的
往前挪然后每挪一个数字再往下递归,递归到n就产生了一个不同的排列,就会产生不同的数组,实际上也是求排列的过程,然而当时并没有想到,
然后就这样递归就可以写出神奇的Pascal代码,注意一些细节就行了。
就是一个一个的比较然后插入数组就可以了,然而这个题就是这样递归的,从小到大一直递归的最深层,然后从后往前一个数字一个数字的
往前挪然后每挪一个数字再往下递归,递归到n就产生了一个不同的排列,就会产生不同的数组,实际上也是求排列的过程,然而当时并没有想到,
然后就这样递归就可以写出神奇的Pascal代码,注意一些细节就行了。
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<string> #include<algorithm> #include<map> #include<set> #include<vector> #include<stack> #include<queue> #include<climits> #define LL long long using namespace std; const int N=201320; const LL mod=530600414; char a[10],b[10]; int n; void print_space(int cur) { for(int i=0;i<cur;i++) cout<<" "; } void dfs(int cur) { char d[10]; print_space(cur); if(cur==n) { cout<<"writeln("; cout<<a[0]; for(int i=1;i<n;i++) cout<<','<<a[i]; cout<<')'<<endl; return; } char c=b[cur]; a[cur]=b[cur]; a[cur+1]=0; strcpy(d,a); if(cur>0) { printf("if %c < %c then\n",a[cur-1],a[cur]); dfs(cur+1); for(int i=cur-1;i>0;i--) { strcpy(a,d); print_space(cur); printf("else if %c < %c",a[i-1],a[cur]); for(int j=cur;j>i;j--) a[j]=a[j-1]; a[i]=c; printf(" then\n"); dfs(cur+1); } strcpy(a,d); for(int j=cur;j>0;j--) a[j]=a[j-1]; a[0]=c; print_space(cur); printf("else \n"); dfs(cur+1); } else dfs(cur+1); } int main() { int t; cin>>t; while(t--) { cin>>n; cout<<"program sort(input,output);"<<endl<<"var"<<endl; cout<<'a'; for(int i=1;i<n;i++) printf(",%c",'a'+i); cout<<" : integer;"<<endl<<"begin"<<endl<<" readln(a"; for(int i=1;i<n;i++) printf(",%c",'a'+i); cout<<");"<<endl; for(int i=0;i<n;i++) b[i]='a'+i; dfs(0); cout<<"end."<<endl; if(t) cout<<endl; } return 0; }
相关文章推荐
- Java并发知识点总结(上)
- [cyber security][php]pfSense目录遍历漏洞分析
- 浅谈Java中的hashcode方法
- Python:staticmethod vs classmethod
- php基础---多态
- 韩顺平 java 第十七讲 排序
- 【C语言】求1000-2000年的闰年,并统计个数
- 选课系统TeacherDao代码(1.0尚有改进)
- Python __setattr__()、__getattr__()、__delattr__() (十)
- C语言-结构体学习
- Java垃圾回收机制
- Java垃圾回收机制
- c语言之乘式还原
- java编程思想第三章总结--操作符
- POJ C++程序设计 编程题#10:输出指定结果二
- 【C语言】编写函数实现:100-200素数的输出
- C语言的谜题
- OpenGL QT glViewport 函数的作用
- Java Servlet API
- C语言函数学习整理