uva110
来源:互联网 发布:上海炫踪网络信息科技 编辑:程序博客网 时间:2024/06/07 09:00
//对递归还是不熟悉啊,搞了很久,有点受不了自己了
#include<stdio.h>#include<string.h>#include<ctype.h>#include<stdlib.h>#include<math.h>int n,vis[100];char ss[100],tt[100];void link(int x,int y,int c){int i;for(i=c;i>=x;i--)tt[i+1]=tt[i];tt[x]=ss[y];}void home(int x,int y,int c){int i;for(i=x;i<c;i++)tt[i]=tt[i+1];}void dfs(int x,int y)//x用来标志已经添加元素的最大坐标,输出y个前导空格{int i,j,ok=1;if(x==n-1)//输出排序后的序列{for(i=0;i<x+4;i++)printf(" ");printf("writeln(");for(i=0;i<n;i++){printf("%c",tt[i]);if(i!=n-1) printf(",");}printf(")\n");return ;}for(i=x;i>=0;i--){if(ok)//输出了else时if不输出前导空格for(j=0;j<y;j++)printf(" ");ok=1;printf("if %c < %c then\n",tt[i],ss[x+1]);link(i+1,x+1,x+1);//插入元素dfs(x+1,y+2);home(i+1,x+1,x+1);//移除元素for(j=0;j<y;j++)printf(" ");if(i!=0) printf("else ");else if(i==0)//最后的else列外,要换行{printf("else\n");link(i,x+1,x+1);dfs(x+1,y+2);home(i,x+1,x+1);}ok=0;}}main(){int i,j,k,t,num,count;char s[100];scanf("%d",&t);while(t--){count=num=0;printf("program sort(input,output);\nvar\n");scanf("%d",&n);for(i=0;i<n;i++){s[num++]=i+'a';ss[count++]=i+'a';if(i!=n-1)s[num++]=',';}ss[count]=s[num]='\0';printf("%s",s);printf(" : integer;\nbegin\n readln(%s);\n",s);tt[0]=ss[0];dfs(0,2);printf("end.\n");if(t!=0)printf("\n");}return 0;}
- uva110
- UVA110
- uva110 - Meta-Loopless Sorts
- uva110 没有循环的排序程序
- UVA110- Meta-Loopless Sorts(模拟全排列)
- uva110-Meta-Loopless Sorts(没有循环的排序程序)
- UVA110模拟出Pascal的8个数字的排序代码插入式递归
- 网游服务器通信架构的设计方案
- 递归和非递归的方法往二叉排序树中插入新的节点
- Java中的泛型
- linux集群时间同步
- vim中添加块注释的方法
- uva110
- Java变量初始化讨论
- launchy
- CSS3 background 分别设置多个背景图片
- IPC之本地套接字
- 2012 google校园招聘 笔试2.2
- Java中网络编程基础知识(一)
- IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解
- Davinci的异构多核间通信基础组件SysLink 2.0