Java程序如何实现对字符串的排列组合问题

Java程序如何实现对字符串的排列组合问题,第1张

import javamathBigInteger;

import javautil;

public class PermutationGenerator {

private int[] a;

private BigInteger numLeft;

private BigInteger total;

public PermutationGenerator(int n) {

if (n < 1) {

throw new IllegalArgumentException("Min 1");

}

a = new int[n];

total = getFactorial(n);

reset();

}

public void reset() {

for (int i = 0; i < alength; i++) {

a[i] = i;

}

numLeft = new BigInteger(totaltoString());

}

public BigInteger getNumLeft() {

return numLeft;

}

public BigInteger getTotal() {

return total;

}

public boolean hasMore() {

return numLeftcompareTo(BigIntegerZERO) == 1;

}

private static BigInteger getFactorial(int n) {

BigInteger fact = BigIntegerONE;

for (int i = n; i > 1; i--) {

fact = factmultiply(new BigInteger(IntegertoString(i)));

}

return fact;

}

public int[] getNext() {

if (numLeftequals(total)) {

numLeft = numLeftsubtract(BigIntegerONE);

return a;

}

int temp;

// Find largest index j with a[j] < a[j+1]

int j = alength - 2;

while (a[j] > a[j + 1]) {

j--;

}

// Find index k such that a[k] is smallest integer

// greater than a[j] to the right of a[j]

int k = alength - 1;

while (a[j] > a[k]) {

k--;

}

// Interchange a[j] and a[k]

temp = a[k];

a[k] = a[j];

a[j] = temp;

// Put tail end of permutation after jth position in increasing order

int r = alength - 1;

int s = j + 1;

while (r > s) {

temp = a[s];

a[s] = a[r];

a[r] = temp;

r--;

s++;

}

numLeft = numLeftsubtract(BigIntegerONE);

return a;

}

//程序测试入口

public static void main(String[] args) {

int[] indices;

String[] elements = { "a", "b", "c"};

PermutationGenerator x = new PermutationGenerator(elementslength);

StringBuffer permutation;

while (xhasMore())

{

permutation = new StringBuffer("%");

indices = xgetNext();

for (int i = 0; i < indiceslength; i++) {

permutationappend(elements[indices[i]])append("%");

}

Systemoutprintln(permutationtoString());

}

}

}

先给你一个看看!

组合命令:nchoosek,例子

nchoosek(1:5,3)%在[1

2

3

4

5]里取3个的全部组合

然后你可以对每一种组合(每一行)进行相应的计算即可

void nn(char c,char cc[])

{//对于有重复的数据这就不行了

//虽然可以都列出来,中间有重复的可能

char tmp,qc;

if(c=='#')printf("%s",cc);

else {

for(qc=c;qc!='#';qc++){

tmp=c;

c=qc;

qc=tmp;

cc++;

nn(qc,cc);

cc--;

tmp=c;

c=qc;

qc=tmp;

}

}

}

main()

{

char cc[100];//请以#结束

scanf("%s",&cc);

nn(cc,cc);

}

请先解释需求:

1、什么叫”按照英文句子里的单词顺序进行排序“,参照的是哪个单词?首单词?

2、排序的目标是什么?整条句子么?

3、什么叫”字母顺序相同“?所有字母升序或降序,还是说句子里所有单词首字母相同?

单纯字符串排序(整篇文章就是二维字符数组,一条句子就是一行字符串),用冒泡排序,嵌套循环比较(不满足你所谓的条件)就执行交换,假设两个句子交换位置,就是两个字符串交换,定义一个临时字符数组变量(够大),之后用strcpy函数和这个临时变量进行两个字符串的交换。(strcpy函数在这里相当于一般数值交换的等号)。

这个不过繁了些,不难。有具体疑问再问吧,tao_qiufeng@126com,有问题发邮件吧,我想主要利用if、while语句,如果你是初学,估计数组是你的难点,特别是动态的多维的数组。

#include<iostream>

using namespace std;

int main()

{

int i,a;

int counter=0;

for (i=0; i<3; ++i)

for (a=0; a<=14; ++a)

{

counter=counter+1;

cout<<"counter"<<counter<<" games"<<a<<" score"<<i<<endl;

}

cinget();

cinget();

}

//用DEV-C++

以上就是关于Java程序如何实现对字符串的排列组合问题全部的内容,包括:Java程序如何实现对字符串的排列组合问题、matlab 排列组合程序、c语言如何实现排列组合的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10109128.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存