Eli pitäis rakentaa ohjelma johon syötetään kirjaimia ja se automaattisesti järjestää niistä sanoja.
Esim. jos syötän ohjelmaan kirjaimet järjestyksessä: L K E O L ohjelma järjestää kirjaimet sanaan KELLO.
Tai keksii kirjaimista lyhempä sanoja.
Esim. jos syötän ohjelmaan kirjaimet järjestyksessä: L K E O L ohjelma järjestää kirjaimet sanaan KELLO.
Tai keksii kirjaimista lyhempä sanoja.
Vastaukset 13
Vanhimmat
Pitäisikö tuo siis sisältää sanaston vai luetella vaan kaikki kirjainkombinaatiot ?
Että se tekisi jonkinlaisen listan sanoista mitä kirjaimista saa kun syöttää ne ohjelmaan
>...listan sanoista mitä kirjaimista saa...
Viisikirjaimisesta saa 120 erilaista vaihtoehtoa mutta jos kirjaimia onkin 10 niin lukumäärä onkin jo 3628800
Siis edelleen - tarkoitatko, että mukana olisi sanasto vaiko ei ? Ohjelmahan ei osaa itsestään päättää mikä on sana ja mikä ei
Sanastoa pikkuisen olla
KELLO
KELOL
KLELO
KLEOL
LKEOL
LLKEO
OLLKE
EOLLK
LEOKL
jne..
teet luupin joka vaihtaa kirjainten paikkoja ja sitten ne tulostaa.
siinähän se sitten. konehan ei sanoista/kirjaimista mitään tiedä.
jos taas haluat vain "oikeat" sanat tulostettua niin kyllä sitten pitää olla vaikka joku sanasto tietokanta josta ohjelma laitetaan etsimään ko. kirjaimia sisältävät sanat ja tulostamaan ne.
paljon on suomenkielessä sanoja jos vielä savokski viännetään. ;D
Pikaisesti googlella löytyi 10000 yleisimmän sanan luettelo:
http://www.verbix.com/documents/wordfrequency_fi.htm
Tuosta voisi olla pohjaksi. Toinen lähde voisi olla joku sanakirja.
Värkätä semmosen? valmiiks?
#include
#include
void kombinaatio(char* list, int r)
{
int f, m;
int n = strlen(list);
for(f = 1, m = n ; m ; f *= m--);
for(; n > 0 ; n-- , r %= f ) {
char*pc,*pc2;
f /= n;
printf("%c", list[r/f]);
for(pc = &list[r/f], pc2 = pc++ ; *pc ; *pc2 = *pc, pc++, pc2++);
*pc2 = 0;
}
}
//Harmillisesti tuo teksti pitää antaa kahdesti
int main(void)
{
char teksti[]="ABC";
char teksti2[]="ABC";
int f, i, m, n;
n = strlen(teksti);
for(f = 1, m = n ; m ; f *= m--);
for(i = 0 ; i < f ; i++) {
printf("\n%d:",i);
kombinaatio(teksti, i);
strcpy(teksti,teksti2);
}
}
//Tämäkään ei ole kovin nopea, kun järjestely aloitetaan
//alusta jokaisella kierroksella
#include
#include
void kombinaatio(int n, int r, char* list) {
int f, j;
for(f = 1, j = 1 ; j < n ; ++j) {
char c, *pc;
f *= j;
c = list[j];
pc = &list[j - ((r / f) % (j + 1))];
list[j] = *pc;
*pc = c;
}
printf("%s", list);
}
#define MERKKEJA 4
int main(void)
{
char teksti[MERKKEJA]="ABC";
char temp[MERKKEJA];
int f, i, m, n;
n = strlen(teksti);
for(f = 1, m = n ; m ; f *= m--);
for(i = 0 ; i < f ; ++i) {
printf("\n%d:",i);
memcpy(temp, teksti, MERKKEJA);
kombinaatio(n, i, temp);
}
scanf("%c",&f);
}
http://www.geocities.com/permute_it/
http://www.google.fi/search?hl=fi&q=kombinatoriikka&btnG=Hae&meta=
samalla myös yhdys sanojen oikein kirjoitus säännöt.