У меня есть проблема в программировании, где я должен создать программу, которая будет вычислять количество пар букв (букв рядом друг с другом), которые не являются «a», «e», «i», «o»,'u' (гласные).
Примеры:
- jas 0
- olovo 0
- skok 1 (sk)
- стандартность 4 (st, tv, rn, st)
Ввод состоит из маленьких буквкоторые составляют слово не длиннее 200 символов, и на выходе должно быть выведено количество пар букв, которые не являются гласными (a, e, i, o, u).
ограничение по времени :
Ограничение памяти :
Примеры, приведенные в задаче, которую мне дали:
Однако, когда я ввожу слова «скок», программа не работает (кажется, что она продолжает работать в фоновом режиме, но не отображает ничегона экране).Однако слово «stvarnost» (реальность) работает, отображая «4» - как указано в задаче.
Из 10 тестовых наборов два тестовых набора дают мне правильный вывод, один - неверный вывод, а семь других тестовых наборов говорят мне, что я превысил свой срок.
Теперь я также хотел бы получить совет о том, как мне избежать превышения установленного срока и как это исправить в приведенной ниже программе.
Вот код, который я начал:
#include <iostream>
#include <string.h>
using namespace std;
int main() {
char zbor[200];
cin.get(zbor, 200);
int length = strlen(zbor);
int j_value = 0;
int check_pairs = 0;
int pairs = 0;
int non_vowels = 0;
for (int i = 0; i < length; i++) {
if (zbor[i] == 'a' || zbor[i] == 'e' || zbor[i] == 'i' || zbor[i] == 'o' || zbor[i] == 'u') {
continue;
} else {
non_vowels++;
for (int j = i + 1; j < length; j++) {
if (zbor[j] == 'a' || zbor[j] == 'e' || zbor[j] == 'i' || zbor[j] == 'o' || zbor[j] == 'u') {
break;
} else {
non_vowels++;
if (non_vowels % 2 != 0) {
check_pairs = non_vowels / 2 + 1;
} else {
check_pairs = non_vowels / 2;
}
if (pairs < check_pairs) {
pairs++;
}
j_value = j;
}
}
i = j_value + 1;
}
}
cout << pairs;
return 0;
}
Редактировать:
#include <iostream>
#include <string.h>
using namespace std;
int main() {
char zbor[200];
cin.get(zbor, 200);
int length = strlen(zbor);
int pairs = 0;
int non_vowels = 0;
for (int i = 0; i < length; i++) {
if (zbor[i] == 'a' || zbor[i] == 'e' || zbor[i] == 'i' || zbor[i] == 'o' || zbor[i] == 'u') {
non_vowels = 0;
continue;
} else {
non_vowels++;
if (non_vowels >= 2) {
if (non_vowels % 2 != 0) {
pairs = non_vowels / 2 + 1;
} else if (non_vowels % 2 == 0) {
pairs = non_vowels / 2;
}
}
}
}
cout << pairs;
return 0;
}
Редактировать код, используя фрагменты кода ответов ниже, ( bruno 's и Ozzy ' s) вот окончательная версия, которая работает:
#include <iostream>
#include <string.h>
using namespace std;
bool vowel(char c) {
switch(c) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
return true;
default:
return false;
}
}
int main()
{
char zbor[200];
cin.get(zbor, 200);
int N = strlen(zbor);
int non_vowels = 0;
int pairs = 0;
for (int i = 0; i < N; i++) {
if (!vowel(zbor[i])) {
non_vowels = 0;
} else {
non_vowels++;
if (!vowel(zbor[i])) {
non_vowels = 0;
} else {
non_vowels++;
if (non_vowels > 1) {
pairs++;
}
}
}
}
cout << pairs;
return 0;
}