謝謝大家的幫助。在這篇文章的下面,我把這兩個腳本的正確版本,現在產生相等的輸出。將Python算法移植到C++ - 不同的解決方案
你好,
我已經寫了一個小畜生串生成腳本在python給定長度內產生一個字母的所有可能的組合。它工作的很好,但因爲我不想更快,所以我嘗試將它移植到C++。
問題是我的C++代碼爲一個單詞創建了太多的組合。 我的繼承人在Python的例子:
./test.py
給我
aaa aab aac aad aa aba ....
而./test
(C++的PROGRAMM給我)
aaa aaa aaa aaa aa
在這裏,我還可以得到所有可能的組合,但我經常給他們兩次礦石。
下面是兩個programms的代碼:
#!/usr/bin/env python
import sys
#Brute String Generator
#Start it with ./brutestringer.py 4 6 "abcdefghijklmnopqrstuvwxyz1234567890" ""
#will produce all strings with length 4 to 6 and chars from a to z and numbers 0 to 9
def rec(w, p, baseString):
for c in "abcd":
if (p<w - 1):
rec(w, p + 1, baseString + "%c" % c)
print baseString
for b in range(3,4):
rec(b, 0, "")
而且這裏的C++代碼
#include <iostream>
using namespace std;
string chars="abcd";
void rec(int w,int b,string p){
unsigned int i;
for(i=0;i<chars.size();i++){
if(b < (w-1)){
rec(w, (b+1), p+chars[i]);
}
cout << p << "\n";
}
}
int main()
{
int a=3, b=0;
rec (a+1,b, "");
return 0;
}
是否有人看到我的錯嗎?我對C++沒有多少經驗。
由於確實
這裏修正版本:
C++
#include <iostream>
using namespace std;
string chars="abcd";
void rec(int w,int b,string p){
unsigned int i;
for(i=0;i<chars.size();i++){
if(b < (w)){
rec(w, (b+1), p+chars[i]);
}
}
cout << p << "\n";
}
int main()
{
rec (3,0, "");
return 0;
}
的Python
#!/usr/bin/env python
import sys
def rec(w, b, p):
for c in "abcd":
if (b < w - 1):
rec(w, b + 1, p + "%c" % c)
print p
rec(4, 0, "")
相等的輸出:
$ ./test > 1
$ ./test.py 3 3 "abcd" "" > 2
$ diff 1 2
$
謝謝,我沒有注意到蟒蛇也被打破了。 而且輸出也是錯位的:( 它應該只打印一次而不是每次迭代(謝謝) – cb0 2010-04-14 15:20:02