设为首页 加入收藏

TOP

UVA110- Meta-Loopless Sorts(模拟全排列)
2015-07-20 17:54:25 来源: 作者: 【 】 浏览:1
Tags:UVA110- Meta-Loopless Sorts 模拟 排列

题目链接


题意:给你n个数,要求按照题目所给的规则大小排序,输出所有可能的结果。

思路:其实求出来的所有序列是n个数的全排列,那么难点在于怎么按照题目所给的格式输出。我们可以看出其实是在已知的序列上插空,所以就可以使用回溯来插入元素,这里可以使用vector,方便元素的插入。

#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        using namespace std; const int MAXN = 10; char str[MAXN]; int n; void space(int cnt) { for(int i = 0; i < cnt; i++) printf(" "); } void deal(int cur, vector
       
         &s) { if (cur == n) { space(n); printf("writeln("); printf("%c", s[0]); for (int i = 1; i < n; i++) printf(",%c", s[i]); printf(")\n"); return; } else { for (int i = cur; i >= 0; i--) { space(cur); if (i < cur) printf("else "); if (i) printf("if %c < %c then", s[i - 1], cur + 'a'); printf("\n"); vector
        
          ss(s); ss.insert(ss.begin() + i, 'a' + cur); deal(cur + 1, ss); } } } int main() { int cas; scanf("%d", &cas); while (cas--) { scanf("%d", &n); for (int i = 0; i < n; i++) str[i] = 'a' + i; printf("program sort(input,output);\nvar\n"); printf("%c", str[0]); for (int i = 1; i < n; i++) printf(",%c", str[i]); printf(" : integer;\nbegin\n"); printf(" readln(%c", str[0]); for (int i = 1; i < n; i++) printf(",%c", str[i]); printf(");\n"); vector
         
           s; s.push_back('a'); deal(1, s); printf("end.\n"); if (cas) printf("\n"); } return 0; }
         
        
       
      
     
    
   
  


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇poj 2151 Check the difficulty o.. 下一篇hdu 1251 统计难题 (map水过)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: