Chinaunix
标题:
如何得到不同原子排列的可能组合方式?要求不重复
[打印本页]
作者:
njuytwc
时间:
2011-10-01 22:07
标题:
如何得到不同原子排列的可能组合方式?要求不重复
本帖最后由 njuytwc 于 2011-10-02 10:26 编辑
先祝福大家十一快乐,有这么一个化学问题,如原子碳和氮,希望对3个碳(用C表示)和4个氮(用N表示)进行线性组合,但不能重复,比如CCCNNNN和NNNNCCC就是重复的。要求得到他们具体可能的组合方式。谢谢大家
补充,由于说法不严谨,不好意思,现在补充一下四楼的意见,就是把字符串倒序之后跟其它字符串不重复。比如CCNNNNC及CNNNNCC就是重复的。欢迎大家讨论。谢谢
作者:
lx8384
时间:
2011-10-01 23:02
提示:
作者被禁止或删除 内容自动屏蔽
作者:
mpstat
时间:
2011-10-02 01:25
不懂lz说的重复的具体意思是什么啊
还有别的啥重复的例子没有?
有严谨的说法么
作者:
Shell_HAT
时间:
2011-10-02 09:37
把字符串倒序之后跟其它字符串不重复,是这样吗?
作者:
njuytwc
时间:
2011-10-02 10:27
回复
3#
mpstat
正如四楼所说,把字符串倒序之后跟其它字符串不重复。就是这样意思,欢迎解答。谢谢
作者:
njuytwc
时间:
2011-10-02 10:28
回复
4#
Shell_HAT
正解,呵呵。能用shell编程解答么?
作者:
njuytwc
时间:
2011-10-02 22:36
有人能解决不?盼解决
作者:
yinyuemi
时间:
2011-10-03 08:46
回复
7#
njuytwc
awk -v txt="CCCNNNNN" 'BEGIN{print txt;for(i=1;i<=3;i++)for(j=4;j<=8;j++)s(i,j)}function s(a,b){split(txt,arr,"");t=arr[a];arr[a]=arr[b];arr[b]=t;for(x=1;x<=length(arr);x++)printf arr[x];print ""}'
CCCNNNNN
NCCCNNNN
NCCNCNNN
NCCNNCNN
NCCNNNCN
NCCNNNNC
CNCCNNNN
CNCNCNNN
CNCNNCNN
CNCNNNCN
CNCNNNNC
CCNCNNNN
CCNNCNNN
CCNNNCNN
CCNNNNCN
CCNNNNNC
复制代码
作者:
xtdddd2000
时间:
2011-10-03 09:22
楼上犀利。。。。。。。不过代码贴过去就错了。自己打下好了。
作者:
ywlscpl
时间:
2011-10-03 10:06
8楼的算法还是有问题的,并没有穷举出来
如:CNNNCNNC
作者:
yinyuemi
时间:
2011-10-03 12:15
8楼的算法还是有问题的,并没有穷举出来
如:CNNNCNNC
ywlscpl 发表于 2011-10-03 10:06
的确是有问题,想要awk写个递归穷尽,没成功,还是用perl吧
cat s.pl
#!/bin/perl
use strict;
my $txt="CCCNNNNN";
my @array=split "", $txt;
my %hash;
sub switch{
my $t;
my ($a,$b,$c)=@_;
$t=@$c[$a];
@$c[$a]=@$c[$b];
@$c[$b]=$t;
}
sub arrange{
my $i;
my ($index,@arr)=@_;
if($index==8) {
my $t=join "", @arr;
if(! defined $hash{$t}){
$hash{$t}++;$hash{reverse $t}++;print @arr,"\n";
}
}
else{
for($i=$index;$i<8;$i++){
switch($index,$i,\@arr);
arrange($index+1,@arr);
switch($index,$i,\@arr);
}
}
}
arrange(0,@array);
perl s.pl
CCCNNNNN
CCNCNNNN
CCNNCNNN
CCNNNCNN
CCNNNNCN
CCNNNNNC
CNCCNNNN
CNCNCNNN
CNCNNCNN
CNCNNNCN
CNCNNNNC
CNNCCNNN
CNNCNCNN
CNNCNNCN
CNNCNNNC
CNNNCCNN
CNNNCNCN
CNNNNCCN
NCCCNNNN
NCCNCNNN
NCCNNCNN
NCCNNNCN
NCNCCNNN
NCNCNCNN
NCNCNNCN
NCNNCCNN
NNCCCNNN
NNCCNCNN
复制代码
作者:
zooyo
时间:
2011-10-03 15:45
提示:
作者被禁止或删除 内容自动屏蔽
作者:
njuytwc
时间:
2011-10-05 23:18
回复
11#
yinyuemi
辛苦了,这个是对的,不过如果有x个C和y个N,这个程序可以通用吗?比如2个C,4个N这样的可以排多少?该如何修改s.pl程序呢?
作者:
njuytwc
时间:
2011-10-05 23:43
回复
11#
yinyuemi
貌似会修改了,谢谢。不过我想知道你这个程序思想是怎么样的,基于什么原理?
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2