uva 110 Meta-Loopless Sorts 用程序写程序 有点复杂的回溯水题
题目要求写一个直接用比较排序的pascal程序,挺有趣的一题。
我看题目数据范围就到8,本来以为贪个小便宜,用switch输出。
然后发现比较次数是阶乘级别的,8的阶乘也是挺大的,恐怕会交不上去。
于是改用回溯法。
其实他比较时就是把后面的数一个一个向前比较,然后插到那位前面,继续回溯。
else的处理比较麻烦而已,改了好久终于跟标准答案一样了。
缩进没有处理,提交上去就ac了,看来oj没有检查缩进呢,如果有检查就还得处理一下了。
代码:(未进行缩进处理)
#include <cstdio>
const int maxn = 10; int n, arr[maxn]; void insert_sort(int p, int c) { //插入排序
for (int i = c; i > p; i--)
arr[i] = arr[i - 1];
arr[p] = c;
} int dfs(int d) {
int tmp[d + 1]; //创建数组储存原来的数值,不然会乱掉
for (int j = 1; j <= n; j++)
tmp[j] = arr[j];
for (int i = d; i >= 1; i--) { //循环从现排好的串后序进行dfs
printf("if %c < %c then\n", arr[i] + 'a' - 1, d + 'a');
insert_sort(i + 1, d + 1); //将接下去的字母插入到i+1的位置
if (d + 1 == n) { //dfs到最深处,输出
printf("writeln(");
printf("%c", arr[1] + 'a' - 1);
for (int j = 2; j <= d + 1; j++)
printf(",%c", arr[j] + 'a' - 1);
printf(")\n");
printf("else\n");
}
else {
dfs(d + 1);
printf("else\n");
}
for (int j = 1; j <= n; j++) //还原数组
arr[j] = tmp[j];
}
insert_sort(1, d + 1); //下面是对最后一个情况,即字母插到整个数组前面,这里是没有else的
if (d + 1 == n) {
printf("writeln(");
printf("%c", arr[1] + 'a' - 1);
for (int j = 2; j <= d + 1; j++)
printf(",%c", arr[j] + 'a' - 1);
printf(")\n");
}
else
dfs(d + 1);
for (int i = 1; i <= n; i++)
arr[i] = tmp[i];
} int main() {
int t;
scanf("%d", &t);
while (t--) {
scanf("%d", &n);
//前面部分
printf("program sort(input,output);\nvar\n");
printf("a");
for (int i = 2; i <= n; i++)
printf(",%c", i + 'a' - 1);
printf(" : integer;\nbegin\nreadln(");
printf("a");
for (int i = 2; i <= n; i++)
printf(",%c", i + 'a' - 1);
printf(");\n");
dfs(0); //开始深搜
printf("end.\n");
if (t != 0)
printf("\n");
}
return 0;
}
uva 110 Meta-Loopless Sorts 用程序写程序 有点复杂的回溯水题的更多相关文章
- 2016四川省赛A,C【写了1w个if的水题】
A题: #include <iostream> #include <stdio.h> #include <string.h> #include <algori ...
- usb输入子系统写程序(三)
目录 usb输入子系统写程序 小结 内核修改 怎么写代码 类型匹配 probe disconnect 程序设计 1th匹配probe 2th 获取usb数据 3th 输入子系统上报按键 title: ...
- HihoCoder - 1501:风格不统一如何写程序
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi写程序时习惯用蛇形命名法(snake case)为变量起名字,即用下划线将单词连接起来,例如:file_name. ...
- 用CIL写程序:写个函数做加法
前言: 上一篇文章小匹夫为CIL正名的篇幅比较多,反而忽略了写那篇文章初衷--即通过写CIL代码来熟悉它,了解它.那么既然有上一篇文章做基础(炮灰),想必各位对CIL的存在也就释然了,兴许也燃起了一点 ...
- 用CIL写程序:定义一个叫“慕容小匹夫”的类
前文回顾: <用CIL写程序:你好,沃尔德> <用CIL写程序:写个函数做加法> 前言: 今天是乙未羊年的第一天,小匹夫先在这里给各位看官拜个年了.不知道各位看官是否和匹夫一样 ...
- 用CIL写程序:从“call vs callvirt”看方法调用
前文回顾:<用CIL写程序系列> 前言: 最近的时间都奉献给了加班,距离上一篇文章也有半个多月了.不过在上一篇文章<用CIL写程序:定义一个叫“慕容小匹夫”的类>中,匹夫和各位 ...
- STM32用JLINK 烧写程序时出现NO Cortex-m device found in JTAG chain现象和解决方案
现象 CPU: STM32107VC 用JLINK 烧写程序时出现NO Cortex-m device found in JTAG chain 如图无法查找到硬件就是CPU 提示1:NO Cortex ...
- 第一章-第四题(ACM 比赛的程序是软件么? “写程序” 和 ”做软件“ 有区别么?软件工程是不是教那些不怎么会写程序的人开发软件? 你怎么看?这个游戏团队, 有很好的软件,但是商业模式和其他软件之外的因素呢?有没有考虑到)--By梁旭晖
引用 http://baike.baidu.com/link?url=z_phkcEO4_HjFG_Lt163dGFAubdb68IbfcfzWscTOrrZ55WbJEQKzyMQ5eMQKyatD ...
- 4.“写程序” 这个活动大多数情况下是个人行为。 我们听说的优秀程序员似乎都是单打独斗地完成任务。同学们在大学里也认识一些参加ACM 比赛的编程牛人, 他们写的ACM 比赛的程序是软件么? “写程序” 和 ”做软件“ 有区别么? 请采访这些学生。
ACM的题库的编程都只能算做程序,不能算软件.写程序和做软件区别还是很大的.程序是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合.为实现预期目的而进行操作的一系列语句和指令.而软件是程 ...
随机推荐
- UniCode 下 CString 转 char* 的方法
今天进行文件操作时,将CString的GetBuffer()后直接倒到char数组后写入文件发现 每个字符与字符之间都有一个空格存在,而且有内容丢失.原来CString类对象GetBuffer(),后 ...
- Cookie/Session编码
Unicode编码:保存中文 中文与英文字符不同,中文属于Unicode字符,在内存中占4个字符,而英文属于ASCII字符,内存中只占2个字节.Cookie中使用Unicode字符时需要对Unicod ...
- centos5.5 快速安装mysql
安装MySQL. [root@sample ~]# yum -y install mysql-server ← 安装MySQL[root@sample ~]# yum -y install php-m ...
- Atitit.软件控件and仪表盘(23)--多媒体子系统--视频输出切换控制cvbs av s-video Ypbpr pal ntsc
Atitit.软件控件and仪表盘(23)--多媒体子系统--视频输出切换控制cvbs av s-video Ypbpr pal ntsc 1. CVBS是AV接口 1 2. S-Video S端子 ...
- 开源项目AndroidUtil-採用Fragment实现TabHost
原文出自:方杰|http://fangjie.sinaapp.com/?p=141 转载请注明出处 学习Android也有一段时间了.感觉大部分的Android应用都有非常多类似的组件,所以就打算做了 ...
- html中iframe子页面与父页面元素的访问以及js变量的访问
1.子页面访问父页面元素 parent.document.getElementById('id')和document相关的方法都可以这样用 2.父页面访问子页面元素 document.ge ...
- 虚拟机下安装centos7方法,修改系统语言为简体中文的方法
说明 自己装系统时一般都可以自定义选择系统语言.可是云端服务器一般都是安装好的镜像,默认系统语言为英文,对于初学者可能还会有搞不懂的计算机词汇.这里简单说一下centos7怎么修改系统语言为中文. 虚 ...
- 在编写JSP的时候出现XXX cannot be resolved to a type
今天遇到这个情况,却发现是eclipse抽风,说javax.servlet.http.Cookie找不到定义,但是经过浏览器测试,可以运行,而JSP源文件中eclipse死活要报错.表示无语. 关于e ...
- hadoop3: mkdir: cannot create directory `/usr/local/hadoop/bin/../logs’: Permission denied
1.hadoop3: mkdir: cannot create directory `/usr/local/hadoop/bin/../logs': Permission denied把所有Datan ...
- CodeForces 2A Winner
Winner Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Statu ...