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;
}
转载于:https://www.cnblogs.com/shuiyonglewodezzzzz/p/7471958.html
uva-110-没有for循环的排序相关推荐
- pythonfor循环列表排序_Python Day4950(for循环语句整理)
班长的图 Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串. 一.Python 循环遍历列表元素 1.for i in list(): 2.for i in enumerate ...
- pythonfor循环列表排序_Python使用for循环对列表内元素进行排序方法
这篇文章介绍Python使用for循环对列表内元素进行排序方法list = [13, 22, 6, 99, 11] for m in range(len(list)-1): for n in rang ...
- 只有一重循环的排序——侏儒排序(Gnome Sort)
侏儒排序:从头(i=0)开始遍历元素,如果当前元素比前一个元素大(array[i]>array[i-1]),就把它跟前一个元素互换(Swap(a[i],a[i-1]))并继续检查它(i--),否 ...
- c语言循环结构排序,C语言循环结构
-C语言冒泡排序算法(附带源码)
排序(sorting)就是调整列表的顺序,是计算机编程中经常要做的一件事情.经过排序以后的数据,可以极大地提高查找的效率. 冒泡排序(bubble sort)是用嵌套的 for 循环来实现的,其名称来 ...
- UVA 10305 Ordering Tasks (拓扑排序)
题意:给你n个点.m个关系,每个关系两个点u.v,表示u小于v,叫你输出任意一个序列保证满足所有给定的关系 例如:n=3 m=2 1 2 3 1 3 2 3 1 2 题解:拓扑排序排的是一个有向无环图 ...
- java循环 排序 查找
一.循环.排序.查找基础练习 1.求1~100奇数和偶数的和 代码: public class OddOrEvenSum {public static void main(String[] args) ...
- c语言双重for循环流程图_使用C语言编写程序对数据进行排序
使用C语言编写程序对数据进行排序 C语言是一种强大的编程软件,使用十分广泛,用户众多,也是学习其他语言的基础.我作为一个C语言忠实粉丝,以一些常见的C程序来剖析C语言的格式和结构,希望能够为广大初学者 ...
- B09_NumPy迭代数组(控制遍历顺序,修改数组中元素的值,使用外部循环,广播迭代)
NumPy迭代数组 NumPy 迭代器对象 numpy.nditer 提供了一种灵活访问一个或者多个数组元素的方式. 迭代器最基本的任务的可以完成对数组元素的访问. 接下来我们使用arange()函数 ...
- oracle:oracle学习笔记(四)循环、光标、异常、瀑布模型
oracle学习笔记:循环.光标.异常 文章目录 打印Hello World 定义基本变量 引用型变量(单行)` my_name emp.ename%type ` 记录型变量(多行) `emp_rec ...
- C++基础-介绍·数据结构·排序·算法
C++基础-介绍·数据结构·排序·算法 特点 使用方向 RPC Data Struct 数据结构 栈 Stack 内存分配中的栈 队列 List 数组 Array 链表 LinkTable 树 Tre ...
最新文章
- 多线程端点服务发布程序(摘)
- mysql数据库的触发器_Mysql数据库触发器
- 63个优秀测试网站地址【个人总结】
- 【JQuery】ajax 调用
- 你试过不用if撸代码吗?
- C语言中的指针有什么作用
- 2021-2025年中国定时控制器行业市场供需与战略研究报告
- working-with-php-and-beanstalkd
- 用户需求和分析——张有亮
- connection对象的参数
- 有趣的Windows之mysql的zip安装及配置
- git用SSH下载代码
- 人工智能应用-手把手教你用Python硬件编程实现打开或关闭电灯泡
- react-native this.props.navigation.goBack()的返回技巧
- Windows10与Kali Linux之间通过XFTP来共享文件
- 通过深度学习实现安全帽佩戴的检测
- 程序员用代码写合租广告,网友神评亮了
- 【基础算法训练】——滑动窗口
- String系列:Java的String类一(String)
- Android调用打印机
热门文章
- 博文视点在SD2.0大会上以书会友
- python中列表是什么类型_Python数据类型之列表
- 显卡算力排行2020_AMD正式发布RX6000系列显卡
- 力扣-80 删除有序数组中的重复项 II
- Flutter进阶第5篇: 使用WebView组件flutter_inappbrowser加载远程web页面渲染新闻详情数据
- 【NOIP2018】游记
- 从properties配置文件中获取到的中文乱码
- 马化腾:互联网企业竞争要注重什么
- OpenWRT配置Zerotier实现内网映射
- php 图像居中裁剪函数,PHP 实现的自定义图像居中裁剪函数示例