我需要一个生成置换的算法或伪代码。假设给我两个数字,表示字母的数量和排列的数量。
我必须编写26个英文字母的所有排列。我写了一段代码,但有一个问题。问题是对于输入3和6,我的代码生成ABC、ACB、BAC、BCA、CBA、CAB。但我需要它来生成ABC、ACB、BAC、BCA、CAB、CBA。
#include<iostream>
using namespace std;
int c, K, N;
void permute(char a[], int i);
void swap(char* x, char* y);
int main(void)
{
int t;
char a[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
cin >> t;
for(int i=1; i<=t; i++)
{
cin >> N >> K;//N denotes number of letters and K denotes number of permutations
cout << "Case " << i <<":" << endl;
c=0;
permute(a,0);
}
return 0;
}
void permute(char* a, int i)
{
if(i==N-1)
{
for(int j=0; j<N; j++)
cout << a[j];
cout << endl;
c++++;
return;
}
else
{
for(int j=i; j<N && c<K; j++)
{
swap(&a[i],&a[j]);
permute(a,i+1);
swap(&a[i],&a[j]);
}
}
return;
}
void swap(char* x, char* y)
{
char temp;
temp=*x;
*x=*y;
*y=temp;
return;
}
#include <algorithm>
#include <iostream>
#include <ostream>
#include <vector>
#include <iterator>
using namespace std;
void print(vector<char> &v){
copy(v.begin(), v.end(), ostream_iterator<char>(cout));
cout << endl;
}
void permute(vector<char> &v, int k){
int c=0;
do {
print(v);
++c;
}while(c < k && next_permutation(v.begin(), v.end()));
}
int main(){
char a[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int t;
cout << "Input number of trials:";
cin >> t;
for(int i=1; i<=t; ++i){
int n, k;
cout << "letter length:";
cin >> n;
cout << "permutation length:";
cin >> k;
vector<char> v(&a[0], &a[n]);
cout << "Case " << i <<":" << endl;
permute(v, k);
}
}
你可以试试这个。我使用c编程。您可以轻松地将此代码转换为c。我的代码是::
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
int com(const void *a,const void *b) {
char c,d;
c=*((char *)a);
d=*((char *)b);
return (c-d);
}
int main() {
char a[600];
int i,j,l,flag=0,count=0,cs,c;
scanf("%d",&cs);
getchar();
for(;cs;cs--) {
gets(a);
for(l=0;a[l];l++);
qsort(a,l,sizeof(char),com);
puts(a);
if(a[0]==0)
break;
while(1) {
for(i=l-1;a[i]>=a[i+1]&&i;i--);
if(a[i]>=a[i+1])
break;
for(j=l-1;a[i]>=a[j];j--);
c=a[i];
a[i]=a[j];
a[j]=c;
for(j=i+1,i=l-1;i>j;i--,j++)
{
c=a[i];
a[i]=a[j];
a[j]=c;
}
puts(a);
}
}
return 0;
}
查看std::next\u permutation函数
上一章介绍了很多排序算法, 插入排序、选择排序、 归并排序等等,这些算法都属于 内部排序算法,即排序的整个过程只是在内存中完成。而当待排序的文件比内存的可使用容量还大时,文件无法一次性放到内存中进行排序,需要借助于外部存储器(例如硬盘、U盘、光盘),这时就需要用到本章介绍的 外部排序算法来解决。 外部排序算法由两个阶段构成: 按照内存大小,将大文件分成若干长度为 l 的子文件(l 应小于内存的可使
有一个集合,例如(1,4,2,5,7,6,9,8,3)。我们通过以下方式计算它的(FD):。inputArray是原始集。例如大小写为(1,4,2,5,7,6,9,8,3)。first差异是从inputArray创建的,方法如下:(inputArray的第二个元素)-(inputArray的第一个元素)等等。 所以给定集合的FD是(3,-2,3,2,-1,3,-1,-5)。任务是找到给定集合的多个
有些答案最初有这样的排序算法: 请注意,和都是全范围的,因此可以比大,也可以比小,所以它可以使成对的顺序正确,也可以使成对的顺序错误(实际上这两种顺序都正确!)。我认为这是一个错误(作者后来称之为错误),这会混淆数组,但它看起来排序正确。不过,原因并不明显。但是代码的简单性(范围很广,没有像冒泡排序那样的)使它变得有趣。 正确吗?如果是这样,它为什么起作用?它有名字吗? 带测试的Python实现:
我编写了一个程序,解决了24的通用版本(为好奇的人提供链接)。也就是说,给定一组数,有没有办法对它们执行二进制运算,以便它们计算到目标数。 为此,我将可能的表达式视为由或组成的char数组,其中是值的占位符,是操作的占位符。请注意,如果有值,则必须有操作。 程序当前的工作方式是按字典顺序检查的每个排列,并查看前缀表达式是否有效。例如,当时,以下表达式被认为是有效的: 以下表达式无效: 我的问题是,
主要内容:算法是什么,伪代码描述算法要想成为一名合格的程序员,除了至少掌握一门编程语言,更重要的是多动手实践,积累足够的代码量,提升自己“遇到问题,解决问题”的能力。任何一门编程语言的学习,本质就是学习它规定的语法,整个过程只能死记硬背,几乎没有捷径。但是,提高“解决问题”的能力是有捷径可寻的,比如掌握一些算法。 提到“算法”,很多人都觉得它高深莫测、晦涩难懂。事实上的确存在一些算法,学员必须具备优秀的数学基础和编程能力才能驾驭。但
本文向大家介绍你对微信排版有什么看法?相关面试题,主要包含被问及你对微信排版有什么看法?时的应答技巧和注意事项,需要的朋友参考一下 最好的方式是自己在微信推送的文章递给HR看,排版能力以及内容输出能力一目了然。 当然,你还可以谈谈相关看法。 排版参数(字号/行间距/字间距/页边距等)统一规划(我的排版参数是字号14px,字间距1.0px,两端缩进尺寸1px,行间距1.75px,供参考) 设计统一的