您可以从aabcccddef得到多少个2个字母的单词


14

(aa将是许多之一,bb将不会)

我以为会是10!/ 8!但显然我在做错事。任何人都可以帮我,因为我很沮丧。


6
感谢您向我们展示您的尝试。您能解释一下为什么您会认为是10!/ 8!因为这可能有助于我们纠正您在概念上的误解?另外,这是来自课程还是教科书的问题?如果是这样,请添加[self-study]标签并阅读其wiki
银鱼

(尽管该问题的作者最初并未添加“自学”标签,但我确实认为此问题属于自学指南,例如,他们已谨慎地向我们展示了他们尝试过的内容,并且问题本身似乎很清楚RoryT的答案表明10!/ 8!答案背后的思想缺陷可能是什么,尽管如果原始海报可以证实这一点当然会很好。)
Silverfish

1
一些人投票关闭它,因为它“不清楚”。我看不到这里有什么不清楚的地方,给出的答案表明该问题已被理解并且足够清楚。
kjetil b halvorsen

2
为了创建2个字母单词,为什么“ c”在可用字母列表中出现3次?

3
@statman我也注意到了这一点(请参阅下面的评论),但回想起来,我佩服提问者将其包括在内的独创性。虽然这不是残酷的补充,但确实需要多花一点时间。
Silverfish

Answers:


22

您有6个不同的字母:a,b,c,d,e,f,其中您可以生成6 x 5 = 30个带有两个不同字母的单词。此外,您可以使用相同的字母两次生成3个单词aa,cc,dd。因此,单词总数为30 + 3 = 33。


17

Zahava方法的替代方法:有种方式将两个字母af配对。但是,也有不2b中,e或f的字符,所以“BB”,“EE”和“FF”是不可能的,使得字的数量 36 - 3 = 3362=3636-3=33

您尝试解决该问题的方式似乎忽略了以下事实:没有10个不同的字母。如果您有10个不同的字母,那么您的答案将是正确的。


4
(+1)的确,这里有十个字母,这是个小鲱鱼,因为其中三个是“ C”!就可以创建两个字母的单词而言,“ C”出现五十次并不重要。同一字母的两个以上出现是多余的。
Silverfish

7

如果您不能以“聪明”的方式进行推理,那么通常值得尝试一下蛮力。想象一下,尝试写下您可以按字母顺序排列的所有单词的列表。

有多少可以以“ A”开头?那么“ A”后面可以跟着A,B,C,D,E或F,所以这是六种方式。

多少可以用“ B”开头?紧随其后的是A,C,D,E或F,这只有五种方式,因为没有第二个“ B”。

有多少可以以“ C”开头?由于“ C”在您的列表中出现了3次,因此它可以跟在其后,也可以跟在其他五个字母中的任何一个后面,因此与“ A”一样,也有6种方式。请注意,我们无法获得任何“额外”方式,仅仅是因为“ C”出现的次数比“ A”多次;除了第二次露面,任何事情都是多余的。

希望现在可以清楚地看到,列表中仅出现一次的每个字母都可以出现在五个单词的开头,出现两次或更多次的字母可以出现在六个单词的开头。仅出现一次的字母是“ B”,“ E”和“ F”,每个字母可以在五个单词的开头,因此等于5 + 5 + 5 = 15个单词。出现两次或两次以上的字母是“ A”,“ C”和“ D”,每个字母可以在六个单词的开头,因此等于6 + 6 + 6 = 18个单词。总共有15 + 18 = 33个字。

这比其他方法更复杂,但是通过尝试以这种系统的方式思考答案,您可能已经能够“发现”一种更快的方法。

请注意,如果这已被表述为概率问题,则您的第一个倾向可能是绘制树形图。第一个字母从六个分支开始,但是第二个字母从“ A”,“ C”和“ D”出现六个分支(因为可以跟随六个字母中的任何一个)但是只有五个分支来自“ B”,“ E”和“ F”(因为它们自己不能跟随它们)。这种分支模式实际上与我的回答相同,但是您可能更希望从树上更直观地考虑它。


1
这是非常正确的。使用蛮力(可能使用“包含-排除”原理)获得答案的上限或下限的概算。
smci

3

数学方法

从数学角度来看,解决方案是列表和其自身之间的直角乘积元素元素(一旦删除对角线)。您可以使用以下算法解决此问题:

  • 计算列表和列表之间的笛卡尔积。
  • 删除对角线
  • 从数组创建一个集合

集合是定义明确的不同对象的集合,因此不会重复对象。

将其翻译成Python

from itertools import product
import numpy as np

letters = list("aabcccddef")
cartesianproduct = np.array(["".join(i) for i in product(letters,letters)]).reshape(10,10)


cartesianproduct

Out :
array([['aa', 'aa', 'ab', 'ac', 'ac', 'ac', 'ad', 'ad', 'ae', 'af'],
       ['aa', 'aa', 'ab', 'ac', 'ac', 'ac', 'ad', 'ad', 'ae', 'af'],
       ['ba', 'ba', 'bb', 'bc', 'bc', 'bc', 'bd', 'bd', 'be', 'bf'],
       ['ca', 'ca', 'cb', 'cc', 'cc', 'cc', 'cd', 'cd', 'ce', 'cf'],
       ['ca', 'ca', 'cb', 'cc', 'cc', 'cc', 'cd', 'cd', 'ce', 'cf'],
       ['ca', 'ca', 'cb', 'cc', 'cc', 'cc', 'cd', 'cd', 'ce', 'cf'],
       ['da', 'da', 'db', 'dc', 'dc', 'dc', 'dd', 'dd', 'de', 'df'],
       ['da', 'da', 'db', 'dc', 'dc', 'dc', 'dd', 'dd', 'de', 'df'],
       ['ea', 'ea', 'eb', 'ec', 'ec', 'ec', 'ed', 'ed', 'ee', 'ef'],
       ['fa', 'fa', 'fb', 'fc', 'fc', 'fc', 'fd', 'fd', 'fe', 'ff']], 
      dtype='|S2')

我们去掉对角线

diagremv = np.array([ np.delete(arr,index) for index,arr in enumerate(cartesianproduct)]) 

diagremv

array([['aa', 'ab', 'ac', 'ac', 'ac', 'ad', 'ad', 'ae', 'af'],
       ['aa', 'ab', 'ac', 'ac', 'ac', 'ad', 'ad', 'ae', 'af'],
       ['ba', 'ba', 'bc', 'bc', 'bc', 'bd', 'bd', 'be', 'bf'],
       ['ca', 'ca', 'cb', 'cc', 'cc', 'cd', 'cd', 'ce', 'cf'],
       ['ca', 'ca', 'cb', 'cc', 'cc', 'cd', 'cd', 'ce', 'cf'],
       ['ca', 'ca', 'cb', 'cc', 'cc', 'cd', 'cd', 'ce', 'cf'],
       ['da', 'da', 'db', 'dc', 'dc', 'dc', 'dd', 'de', 'df'],
       ['da', 'da', 'db', 'dc', 'dc', 'dc', 'dd', 'de', 'df'],
       ['ea', 'ea', 'eb', 'ec', 'ec', 'ec', 'ed', 'ed', 'ef'],
       ['fa', 'fa', 'fb', 'fc', 'fc', 'fc', 'fd', 'fd', 'fe']], 
      dtype='|S2')

我们计算元素集的长度:

len(set(list(diagremv.flatten())))

Out: 33

1
我喜欢您正式化并自动化了暴力破解方法
Tim Seguine

2

我认为有人认为这个问题不清楚的原因是因为它使用了“ 2个字母的单词”一词。鉴于每个人都在寻求解决方案,他们都将“ 2个字母的单词”解释为类似于“字母对”的意思。作为一个狂热的拼字游戏玩家,立即问这个问题,意思是:“从这些字母可以得到多少个合法的2个字母的单词?” 而答案就是- 12!至少,根据《官方拼字游戏玩家词典》(OSPD5)的最新版本。单词是aa,ab,ad,ae,ba,be,da,de,ed,ef,fa和fe。(请记住,您从未听说过许多这样的单词并不能否认它们的有效性!); o)

只是我的“ 2感”。


1

不用蛮力计数的另一种方法是:

如果第一个字母是a,c或d,则第二个字母有6个不同的剩余选择。

但是,如果第一个字母是b,e或f,则第二个字母只有5个不同的剩余选择。

所以有 36+35=33 区分两个字母词。


0

您提问的方式有问题。实际上,“ aabcccddef”行上允许采取什么动作来采用2个字母的单词?我们可以取代后者还是只越过不必要的东西?根据这种情况,我找到了两个可能的答案:

1)如前所述,我们可以用任何方式将字母替换为33。30对不同的字母(6 * 5)和3对类似的字母。

2)如果我们不能切换字母的位置而只能越过,我们得到的答案就会少得多。让我们从头到尾数。从“ a”开始,我们有6个字母排在第二位,从“ b”开始,它只有4个字母。“ c”也有4个,“ d”-3和“ e” -1。总共18个。


-1

我对这个问题的回答:从aabcccddef可以得到多少个2个字母的单词

  1. aa; 2. ab 3.广告;4. ae 5.广告;6. ba; 7.是 8.德 9. fa; 10. fe

* //问题的重点是“单词”而不是成对的组合。使用单词时,该字母必须出现两次才能多次使用该单词,例如,字母“ a”中有两个,字母“ d”中有两个,因此有可能将“ ad”写成一个单词两次。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.