Расшифровка анаграмм - C (СИ)
Формулировка задачи:
Пишу программу, расшифрующую анаграммы для примера взял несколько слов, но программа выводит лишние слова, которые по идее не должны подходить. Например при вводе мной слова "abaci" она так же выводит слова "abaka" и "abada", которые по идее должны отличатся колличеством своих совпадений.
Код программы :
Проверял колличество совпадений, и прочее с помощью этой программы:
Все числа отличались, в чём может быть проблема?
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <iostream> char ar[][15] = { "robo", "kert", "abaci", "abaka", "abada", "svinopas", }; int main() { int pr = 0; int ko = 0; char a[15]; scanf("%s", a); int n = strlen(a); //printf("%d", n); for (long int i = 0; i < 20; i++) { // Vrybaem perebor vseh elementov massiva c dannimi 4islami if(strlen(ar[i]) == n) { for(int k = 0; k < n;k++){// Perebiraem vse simvoli massiva for(int j = 0; j< n;j++){ // Opyat' perebiraem if(ar[i][j] == a[k]) { //Proverayem simvoli oboih slov na sovpadenie pr++; // Plysyem 1 v sly4ae sovpadenia } } } //printf("%d\n", pr); for(int c = 0 ; c < strlen(a); c++) { for(int b = 0; b < strlen(a) ;b++) { if(a[c] == a[b]) ko++; // S4itivaem sovpadenia v dannom slove } //printf("%d\n", ko); } //printf("%d\n", ko); ko -=strlen(a); // Vi4itaem dliny slova, tk v lubom sly4ae eto sovpadet pr-=ko; // vi4itaem ostaok i poly4aem dliny slova. ko = 0; // obnylaem, dabi prodoljit' cikl if(pr == n) { // proveryaem sovpadaet li dlina slova s dannim 4islom printf("%s\n",ar[i]); // Vivodim poly4enoe 4islo } pr = 0; // obnylaem, dabi prodoljit' cikl } } }
#include <string.h> #include <stdio.h> #include <stdlib.h> int main() { char a[15]; scanf("%s", a); int pr = 0;int lo = 0; for(int i = 0; i < strlen(a); i++) { for(int k = 0; k < strlen(a); k++) { if(a[k] == a[i]) pr++; } } lo = pr; printf("%d\n", pr); lo-= strlen(a); printf("%d\n", pr-lo); }
^
|
Решение задачи: «Расшифровка анаграмм»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <string.h> #define N 6 char ar[N][15] = { "robo", "kert", "abaci", "abaka", "abada", "svinopas", }; int main() { int pr, ko, n, i, j, k, flag; char a[15]; puts("Input word:"); scanf("%s", a); n = strlen(a); for(k = 0; k < N; ++k){ if(strlen(ar[k]) == n){ pr = ko = flag = 0; for(i = 0; i < n; ++i){ for(j = 0; j < n; ++j){ if(a[i] == a[j]) ++pr; if(a[i] == ar[k][j]) ++ko; if(a[i] != ar[k][i]) flag = 1; } if(pr != ko){ printf("Words '%s' and '%s' are not an anagram.\n", a, ar[k]); break; } } if(i == n){ if(flag) printf("Yes!Words '%s' and '%s' are an anagram.\n", a, ar[k]); else printf("Words '%s' and '%s' are same.\n", a, ar[k]); } } else printf("Words '%s' and '%s' are not an anagram.\n", a, ar[k]); } return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с памятью, вводом/выводом и строками
- Определяем массив слов-анаграмм
- Вводим слово для проверки на анаграмму
- Вычисляем длину введенного слова
- Проверяем каждое слово из массива на соответствие введенному слову
- Если длина слова из массива не равна длине введенного слова, выводим сообщение об этом и прерываем цикл
- Если введенное слово и слово из массива имеют одинаковую длину, проверяем, являются ли они анаграммами
- Если буквы введенного слова идут в том же порядке, что и в слове из массива, выводим сообщение о том, что слова являются одним и тем же словом
- Если буквы введенного слова идут в другом порядке, выводим сообщение о том, что слова являются анаграммами
- Если слово из массива не соответствует критериям (не является анаграммой или является тем же словом), выводим сообщение об этом
- Возвращаем 0, чтобы указать, что программа успешно завершилась
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д