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的题库的编程都只能算做程序,不能算软件.写程序和做软件区别还是很大的.程序是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合.为实现预期目的而进行操作的一系列语句和指令.而软件是程 ...
随机推荐
- static 与单例模式、auto_ptr与单例模式、const 用法小结、mutable修饰符
一.static 与单例模式 单例模式也就是简单的一种设计模式,它需要: 保证一个类只有一个实例,并提供一个全局访问点 禁止拷贝 C++ Code 1 2 3 4 5 6 7 8 9 10 11 ...
- hadoop+spark集群搭建入门
忽略元数据末尾 回到原数据开始处 Hadoop+spark集群搭建 说明: 本文档主要讲述hadoop+spark的集群搭建,linux环境是centos,本文档集群搭建使用两个节点作为集群环境:一个 ...
- 使用阿里云Docker镜像加速
使用docker官方的docker hub速度太慢,正好看到国内阿里云也做了docker镜像,于是想试试看阿里云的docker源.先附上 阿里云docker hub地址 .新用户需要注册成为开发者.打 ...
- XMPP 基础 (转载)
技术博客 http://www.cnblogs.com/ChenYilong/ 新浪微博 http://weibo.com/luohanchenyilong Fullscreen XMPP 基础 ...
- 用React Native编写跨平台APP
用React Native编写跨平台APP React Native 是一个编写iOS与Android平台实时.原生组件渲染的应用程序的框架.它基于React,Facebook的JavaScript的 ...
- Struts2初学 Struts.xml详解二
A.使用继承实现设置全局视图 package节点中还可以设置全局的视图,如: <global-results> <result name="e ...
- 从调试角度理解ActionContext、OgnlContext、OgnlValueStack的关系
被调试代码: package web; import java.util.Map; import javax.servlet.http.HttpServletRequest; import or ...
- struts2拦截器的实现原理及源码剖析
拦截器(interceptor)是Struts2最强大的特性之一,也可以说是struts2的核心,拦截器可以让你在Action和result被执行之前或之后进行一些处理.同时,拦截器也可以让你将通用的 ...
- 基于jQuery select下拉框美化插件
分享一款基于jQuery select下拉框美化插件.该插件适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗.效果图如下: 在线预览 源码下 ...
- StringJDBC更改数据库的两种方式
方法一jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)", new Object[] {user.getId(), ...