uva-110-没有for循环的排序

题意:看输出就懂了,暴力枚举题,字符串最大长度是8,所有长度等于8的长度是8!=1x2x3x4x5x6x7x8=40320,数据量比较小的.只是枚举的方向比较怪异,如下,长度等于3的串

a

ab,ba

abc,acb,cab

bac,bca,cba

但是输出确实不好输出,事实上输出的位置是可用计算出来的.

解法:

组成一颗多叉树,根节点是a,那么第1层有俩个孩子,第二层有三个孩子,第三层有4个孩子,一直往下生成,到第八层,然后就是遍历这颗多叉树.

AC时间,80ms

2G内存的电脑还是能刷题的

#include <iostream>
#include <stdio.h>
#include<memory.h>
using namespace std;const int N = 8;
#define null NULL
struct Node
{char a[8];int al;Node* cp[8];int cl;Node(){memset(a, 0, sizeof(a));al = 0;memset(cp, 0, sizeof(cp));cl = 0;};
};
char le[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h' };
const int l = 8;
Node* root = null;void copy(Node* root, Node* node, int index, char c)
{int k = root->al + 1;int j = 0;for (int i = 0; i < k; i++){if (i == index){node->a[node->al++] = c;continue;}node->a[node->al++] = root->a[j++];}
}void buildTree(Node* root, int index, int n)
{if (index == n) return;for (int i = index; i >= 0; i--){Node* node = new Node();copy(root, node, i, le[index]);root->cp[root->cl++] = node;}for (int i = 0; i < root->cl; i++)buildTree(root->cp[i], index + 1, n);
}
void blank(int n)
{for (int i = 0; i < n; i++)cout << " ";
}
void print(char a[], int l)
{cout << a[0];for (int i = 1; i < l; i++)cout << "," << a[i];}
void dfs(Node* root, int n, int index, int bs)
{if (index + 1 == n){blank(bs);cout << "writeln(";print(root->a, root->al);cout << ")" << endl;return;}for (int i = 0; i < root->cl; i++){blank(bs);if (i == 0){cout << "if ";}else if (i == root->cl - 1){cout << "else ";}else{cout << "else if ";}if (i == 0){cout << root->cp[i]->a[index] << " < " << root->cp[i]->a[index + 1]<< " " << "then";}else if (i != root->cl - 1){cout << root->cp[i]->a[index - i] << " < "<< root->cp[i]->a[index + 1 - i] << " " << "then";}cout << endl;dfs(root->cp[i], n, index + 1, bs + 2);}
}int main()
{freopen("C:\\Users\\zzzzz\\Desktop\\1.txt", "r", stdin);int caseNum = 0;cin >> caseNum;while (caseNum--){int m;cin >> m;cout << "program sort(input,output);" << endl;cout << "var" << endl;print(le, m);cout << " : " << "integer;" << endl;cout << "begin" << endl;int bs = 2;blank(bs);cout << "readln(";print(le, m);cout << ");" << endl;int index = 0;root = new Node();root->a[root->al++] = le[index];index++;buildTree(root, index, m);//cout << root->cl << endl;if (m == 1){blank(bs);cout << "writeln(a)" << endl;}else{dfs(root, m, 0, bs);}cout << "end." << endl;if (caseNum != 0){cout << endl;}}return 0;
}

  

posted on 2017-09-04 00:38 好吧,就是菜菜 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/shuiyonglewodezzzzz/p/7471958.html

uva-110-没有for循环的排序相关推荐

  1. pythonfor循环列表排序_Python Day4950(for循环语句整理)

    班长的图 Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串. 一.Python 循环遍历列表元素 1.for i in list(): 2.for i in enumerate ...

  2. pythonfor循环列表排序_Python使用for循环对列表内元素进行排序方法

    这篇文章介绍Python使用for循环对列表内元素进行排序方法list = [13, 22, 6, 99, 11] for m in range(len(list)-1): for n in rang ...

  3. 只有一重循环的排序——侏儒排序(Gnome Sort)

    侏儒排序:从头(i=0)开始遍历元素,如果当前元素比前一个元素大(array[i]>array[i-1]),就把它跟前一个元素互换(Swap(a[i],a[i-1]))并继续检查它(i--),否 ...

  4. c语言循环结构排序,C语言循环结构 -C语言冒泡排序算法(附带源码)

    排序(sorting)就是调整列表的顺序,是计算机编程中经常要做的一件事情.经过排序以后的数据,可以极大地提高查找的效率. 冒泡排序(bubble sort)是用嵌套的 for 循环来实现的,其名称来 ...

  5. UVA 10305 Ordering Tasks (拓扑排序)

    题意:给你n个点.m个关系,每个关系两个点u.v,表示u小于v,叫你输出任意一个序列保证满足所有给定的关系 例如:n=3 m=2 1 2 3 1 3 2 3 1 2 题解:拓扑排序排的是一个有向无环图 ...

  6. java循环 排序 查找

    一.循环.排序.查找基础练习 1.求1~100奇数和偶数的和 代码: public class OddOrEvenSum {public static void main(String[] args) ...

  7. c语言双重for循环流程图_使用C语言编写程序对数据进行排序

    使用C语言编写程序对数据进行排序 C语言是一种强大的编程软件,使用十分广泛,用户众多,也是学习其他语言的基础.我作为一个C语言忠实粉丝,以一些常见的C程序来剖析C语言的格式和结构,希望能够为广大初学者 ...

  8. B09_NumPy迭代数组(控制遍历顺序,修改数组中元素的值,使用外部循环,广播迭代)

    NumPy迭代数组 NumPy 迭代器对象 numpy.nditer 提供了一种灵活访问一个或者多个数组元素的方式. 迭代器最基本的任务的可以完成对数组元素的访问. 接下来我们使用arange()函数 ...

  9. oracle:oracle学习笔记(四)循环、光标、异常、瀑布模型

    oracle学习笔记:循环.光标.异常 文章目录 打印Hello World 定义基本变量 引用型变量(单行)` my_name emp.ename%type ` 记录型变量(多行) `emp_rec ...

  10. C++基础-介绍·数据结构·排序·算法

    C++基础-介绍·数据结构·排序·算法 特点 使用方向 RPC Data Struct 数据结构 栈 Stack 内存分配中的栈 队列 List 数组 Array 链表 LinkTable 树 Tre ...

最新文章

  1. 多线程端点服务发布程序(摘)
  2. mysql数据库的触发器_Mysql数据库触发器
  3. 63个优秀测试网站地址【个人总结】
  4. 【JQuery】ajax 调用
  5. 你试过不用if撸代码吗?
  6. C语言中的指针有什么作用
  7. 2021-2025年中国定时控制器行业市场供需与战略研究报告
  8. working-with-php-and-beanstalkd
  9. 用户需求和分析——张有亮
  10. connection对象的参数
  11. 有趣的Windows之mysql的zip安装及配置
  12. git用SSH下载代码
  13. 人工智能应用-手把手教你用Python硬件编程实现打开或关闭电灯泡
  14. react-native this.props.navigation.goBack()的返回技巧
  15. Windows10与Kali Linux之间通过XFTP来共享文件
  16. 通过深度学习实现安全帽佩戴的检测
  17. 程序员用代码写合租广告,网友神评亮了
  18. 【基础算法训练】——滑动窗口
  19. String系列:Java的String类一(String)
  20. Android调用打印机

热门文章

  1. 博文视点在SD2.0大会上以书会友
  2. python中列表是什么类型_Python数据类型之列表
  3. 显卡算力排行2020_AMD正式发布RX6000系列显卡
  4. 力扣-80 删除有序数组中的重复项 II
  5. Flutter进阶第5篇: 使用WebView组件flutter_inappbrowser加载远程web页面渲染新闻详情数据
  6. 【NOIP2018】游记
  7. 从properties配置文件中获取到的中文乱码
  8. 马化腾:互联网企业竞争要注重什么
  9. OpenWRT配置Zerotier实现内网映射
  10. php 图像居中裁剪函数,PHP 实现的自定义图像居中裁剪函数示例