UVA110
来源:互联网 发布:中国站长站 源码 编辑:程序博客网 时间:2024/06/05 15:22
题目的意思就是让程序写排序。
根据那个输出意思应该很明白;
这题做法应该是一个一个字母插入,首先插入a;
然后插入b 。 b可以插在后面变成 ab ,也可以插在前面,变成ba。
然后插入c 分别是abc ,acb ,cab , bac ,bca , cba 和输出结果的顺序一样,那就是按这样的。
可以用回溯来实现这种插入 ,现在注意的就是输出格式,输出格式最难的就是什么时候if 什么时候 else if ,什么时候 else ,还有就是if后面比较的两个数是什么;
看输出可以发现
在输出 if a < b时,我们程序正在做 把 b 插入 a后面这个步骤,
输出 if b < c 时,正在做 把 c 插入b 这个步骤。
可以得出在做插入步骤时,输出该位置上的值,和要插入的值即可。。
然后什么时候是 else if ? 可以发现,如果你做的是每次要把数字插入最后面时 输出是if 而如果不是插入最后面 则输出 else if,因为插入最后面,说明这次比较是最外层比较,不是最后一个位置,则说明要先把先前那个比较否定掉,要加else;
那单独的else 什么时候输出,就是要插入到最开头的位置时。。因为这时候最外面一层if要否定;
AC代码:
#include<iostream>#include<algorithm>#include<string>using namespace std;const int N = 10;int num;char res[N];void c_insert(string& str, int pos, char ch) {string temp = "";temp += ch;str.insert(pos , temp);}void writen ( string a) { cout << "writeln(";for (int i = 0 ; i < num ; i++) {cout << a[i];if (i != num - 1) cout << "," ;elsecout << ")"<<endl;}}void print_process (int cur , string str) {if (cur == num) {writen(str);return;}int t = 0;for (int i = cur ; i >=0 ; i--) {if(i == 0)cout << "else" << endl;else if(!(t++))cout << "if "<< str[i - 1] << " < " << res[cur] <<" then" <<endl;elsecout << "else " << "if "<< str[i - 1] << " < " << res[cur] <<" then" <<endl;c_insert(str , i , res[cur]);print_process (cur + 1 , str);str.erase(i ,1);}}int main () {int t ;cin >> t;while (t--) {cin >> num;for (int i = 0 ; i < num ; i++) {res[i] = 'a' + i;}cout << "program sort(input,output);" <<endl;cout << "var" <<endl;for (int i = 0 ; i < num ; i++ ) {cout << res[i];if (i != num - 1 )cout << ",";elsecout <<" : integer;\nbegin\nreadln(";}for (int i = 0 ; i < num ; i++) {cout << res[i];if (i != num - 1)cout << ",";elsecout << ");\n";}string temp = "";temp += res[0];print_process(1,temp);cout << "end.\n";if (t)cout << endl;}return 0;}
0 0
- uva110
- UVA110
- uva110 - Meta-Loopless Sorts
- uva110 没有循环的排序程序
- UVA110- Meta-Loopless Sorts(模拟全排列)
- uva110-Meta-Loopless Sorts(没有循环的排序程序)
- UVA110模拟出Pascal的8个数字的排序代码插入式递归
- work queue and wait queue 傻傻分得清楚!
- QEMU Emulator User Documentation
- 【Cocos2d-x v3.x官方文档】Cocos2d-x 多分辨率适配完全解析
- CSS Study Notes— Selectors for Class/Div/Attribute
- IPhone MFI蓝牙认证分析
- UVA110
- hdu 1045 Fire Net
- hd 2734 Quicksum
- gnome-disks安装错误
- JS 读取写入 Cookie ;
- STL Vector Container
- 9个最好用的在线编译/调试工具
- AE开发之IMapFrame接口
- 博客的第一天,徜徉知识的海洋,领略高手的风采