我打算做的恶作剧是把同事键盘上的按键排成一个有意义的pangram,但为了做到这一点,角色只能出现一次。
作为一名程序员,我认为这是一个有趣的问题,在做了一些谷歌搜索之后,我还没有找到一个没有重复字符的pangram。
由于英语元音数量有限,我预计这可能是不可能的。如果不是不可能的话,我很好奇是否有一个可以创造的句子是有意义的。
答案 0 :(得分:1)
这是一个很好的问题!如果我是你,我会以这种方式解决问题:
找到一个英文字典,其中每个单词的演讲部分是什么。丢弃带有重复字符的所有单词。
查找/创建英语句子的语法。它可能是这样的:S -> NP VP, NP → Pronoun | Proper-Noun | ...
reference
鉴于你不希望句子中有重复的字符,你的回溯过程不会探索深层节点,你几乎可以肯定它会相当快。
答案 1 :(得分:1)
我知道这有点旧,但在尝试解决同样的问题时,我遇到过这篇文章。
基本上,我将问题建模为图形,并使用A *搜索。图中的每个节点表示尚未选择的字母数,每个边表示选择一个可能位于完美pangram中的单词。
我用于A *的启发式是辅音与元音比率的组合,以及字母在单词中的使用频率。
我的解决方案是JavaScript中的开源,并有更详细的解释:
答案 2 :(得分:-1)
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
void main()
{
char str[1000];
int a[26]={0},count=0,i,n;
for(i=0;i<1000;i++)
{
scanf("%c",&str[i]);
if(str[i]=='\n')
break;
else if(str[i]<=90&&str[i]>=65)
{
n=str[i]-'A';
if(a[n]!=1)
{
a[n]++;
count++;
}
}
else if(str[i]<=122&&str[i]>=97)
{
n=str[i]-'a';
if(a[n]!=1)
{
a[n]++;
count++;
}
}
if(count==26)
{
printf("pangram");
exit(0);
}
}
printf("not pangram");
}