一个英语单词Banana,将所有的字母拆散重新组合,问有多少种组合满足b后边马上出现a
2019-04-17
一个英语单词Banana,将所有的字母拆散重新组合,问有多少种组合满足b后边马上出现a
优质解答
你这是英文问题?数学问题?还是程序问题?
1.如果是英文问题,答案是没有,因为banana无法再组合成其他单词;如果banana本身考虑在内,那么也就这个1个满足要求.
2.如果是数学问题,那么答案是30.这是一个古典概率问题,Banana有6个字母,本来有6!种可能的组合;但a重复了3次;n重复了2次,因此最后的组合是6!÷ (3!× 2!)= 60; 但ba相连的,组合则是5×(4!÷ ( 2!× 2!)),因为ba出现的位置有5种,每种的组合(4!,排除剩余的a重复次数2!和n的重复次数2!)=6,所以最后结果是30
3.如果是程序问题,那么一个简单的c++程序如下:
#include
#include
#include
using namespace std;
int main(int argc,char** argv) {
string str = "Banana";
int total_cnt = 0;
int match_cnt = 0;
sort(str.begin(),str.end());
do {
cout
你这是英文问题?数学问题?还是程序问题?
1.如果是英文问题,答案是没有,因为banana无法再组合成其他单词;如果banana本身考虑在内,那么也就这个1个满足要求.
2.如果是数学问题,那么答案是30.这是一个古典概率问题,Banana有6个字母,本来有6!种可能的组合;但a重复了3次;n重复了2次,因此最后的组合是6!÷ (3!× 2!)= 60; 但ba相连的,组合则是5×(4!÷ ( 2!× 2!)),因为ba出现的位置有5种,每种的组合(4!,排除剩余的a重复次数2!和n的重复次数2!)=6,所以最后结果是30
3.如果是程序问题,那么一个简单的c++程序如下:
#include
#include
#include
using namespace std;
int main(int argc,char** argv) {
string str = "Banana";
int total_cnt = 0;
int match_cnt = 0;
sort(str.begin(),str.end());
do {
cout