Из слова «молоко» можно составить слово «коло». Сколько слов из заданного словаря можно составить, используя буквы заданного слова, причем каждую букву можно использовать не более одного раза.
Входные данные:
В первой строке записано заданное слово, во втором - число N, количество слов в словаре.
Далее идет N строк - слова со словаря.
Выходные данные:
Единственное число - количество слов, которые можно составить из заданного слова.
#include <iostream> #include <string.h> using namespace std; int main() { char word[255],words[255][255]; char table[255]; int count[255],tempcount[256], templength,length,sum = 0, kilk,countwords = 0; int mem = 0, index = 0;; cin >> word; cin >> kilk; for (int i = 0; i < kilk; i++) cin >> words[i]; length = strlen(word); table[0] = word[0]; for (int i = 1; i < length; i++) { for (int j = 0; j < i; j++) if (word[i] == table[j]) mem = 1; if (mem == 0) { index++; table[index] = word[i]; } mem = 0; } mem = 0; for (int i = 0; i <= index; i++) { for (int j = 0; j < length; j++) { if (table[i] == word[j]) mem++; } count[i] = mem; mem = 0; } int mem2 = 0; for (int a = 0; a < kilk; a++) { templength = strlen(words[a]); mem = 0; for (int i = 0; i <= index; i++) { for (int j = 0; j < templength; j++) { if (table[i] == words[a][j]) mem++; } tempcount[i] = mem; mem = 0; } for (int i = 0; i <= index; i++) sum = sum + tempcount[i]; mem2 = 0; if (sum == templength) { for (int i = 0; i <= index; i++) { if (tempcount[i]>count[i])mem2++; } if (mem2 == 0) countwords++; } sum = 0; } cout << countwords<< endl ; }
Есть решение которого нет на сайте? Пиши admin@devexe.top