Задачи по строкам. Уровень 1

Задача 1. Ваня и любимые буквы:

Все знают, что Ваня очень любит буквы f и d, поэтому он обрадуется, если в тексте задачи по программированию будут обе эти буквы. Вам показали этот текст, определите, обрадуется ли Ваня или нет.
Входные данные:
Первая строка содержит одно целое число N (1 ≤ N ≤ 10^3) - длина строки.
Вторая строка содержит текст по программированию.
Выходные данные:
Выведите yes, если Ваня обрадуется, иначе no.

Пример:

Ввод Вывод
8
steDhfkd
yes
7
frwvFSn
no

В этой задаче мы должны пройти по массиву символов и сравнить каждый элемент с символом 'f' и 'd'. Если находим хоть одну букву f, то меняем переменную num_f, аналогично с буквой d.

Пример на Си:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main() {
	int n, i, num_f, num_d;
	char S[1000];
	scanf("%i", &n);
	getchar();  // чтобы не записался символ '\n' в строку S
	gets(S);  // ввод строки S
	num_f = num_d = 0;  // стартовое значение
	for (i = 0; i < n; i++) {
		if (S[i] == 'f') { 
			num_f = 1;
		}
		if (S[i] == 'd') { 
			num_d = 1;
		}
	}
	if (num_f == 1 && num_d == 1) { 
		printf("yes");
	}
	else {
		printf("no");
	}
	return 0;
}

Задача 2. Смена регистра:

Вам дана строка длины N, необходимо поменять регистр каждой буквы. То есть, если буква маленькая, то нужно поменять ее на большую и наоборот.
Входные данные:
Первая строка содержит одно целое число N (1 ≤ N ≤ 10^3) - длина строки.
Вторая строка содержит строку.
Выходные данные:
Выведите новую строку после замены всех букв.

Пример:

Ввод Вывод
4
ASEr
aseR
7
AndROid
aNDroID

Для решения задачи, нужно обратиться к таблице символов ASCII. Так как символы заглавных и строчных букв идут друг за другом, то нужно просто прибавить или отнять число 32, чтобы поменять регистр.

Пример на Си:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main() {
	int n, i;
	char S[1000];
	scanf("%i", &n);
	getchar();  // чтобы не записался символ '\n' в строку S
	gets(S);  //  ввод строки S
	for (i = 0; i < n; i++) {
		if (S[i] >= 'a' && S[i] <= 'z') {  
			S[i] = S[i] - 32;
		}
		else {
			S[i] = S[i] + 32;
		}
	} 
	printf("%s", S);
	return 0;
}

Задача 3. Проблемная клавиатура:

У Маши сломалась одна из кнопок на клавиатуре. Эта кнопка вместо точки печатает вот такой символ '#'. Маша пишет большой доклад и просит вас помочь ей изменить все символы '#' на точки.
Входные данные:
Единственная строка содержит строку до 1000 символов.
Выходные данные:
Выведите отформатированную строку.

Пример:

Ввод Вывод
DFdr#ers#1e$fd# DFdr.ers.1e$fd.

Чтобы узнать длину строки, нужно воспользоваться функцией strlen(). Так же можно воспользоваться циклом while(S[i] != '\0'), то есть цикл будет работать пока не закончится строка, не забывайте менять значение i.

На каждом шаге цикла нужно сравнить текущий элемент с символом '#', если это он, то присвоить этому элементу символ ' . ' (точка).


Задача 4. Цифры:

Вам дан текст, необходимо найти в нем количество цифр от 1 до 7 включительно.
Входные данные:
Единственная строка содержит строку до 1000 символов.
Выходные данные:
Выведите количество цифр.

Пример:

Ввод Вывод
9rd fr4sd321rE 4


Задача 5. Повторяющиеся пробелы:

У Дениса залипает клавиша пробела, из-за этого в его тексте могут быть повторяющиеся пробелы. Вам нужно исправить текст Дениса, убрав все повтрояющиеся пробелы. Пробелы в тексте не могут быть в начале или в конце.
Входные данные:
Единственная строка содержит строку от 1 до 10^5 символов.
Выходные данные:
Выведите отформатированную строку.

Пример:

Ввод Вывод
gfh rh   re gfh rh re

Задача 6. Собственный язык:

Андрей с другом придумали свой язык для общения в соцсети, чтобы никто не смог прочитать их сообщения. Точнее они просто придумали для некоторых букв новое написание. В их языке
B = #, D = @, G = *, h = &, n = $, x = ~, s = %. Вам нужно придумать алгоритм, который расшифрует их сообщения.
Входные данные:
Первая строка содержит одно целое число n (1 ≤ n ≤ 1000) - количество сообщений.
В следующих n строках записаны строки от 1 до 100 символов - сообщения друзей.
Выходные данные:
Выведите расшифровку для каждого сообщения.

Пример:

Ввод Вывод
2
gh#G$%rwe
*hjE~**DKr
ghBGnsrwe
GhjExGGDKr

Для этой задачи нужен массив строк.

Пример на Си:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main() {
	int n, l, i;
	char S[1000][100];
	scanf("%i", &n);
	getchar();
	for (int t = 0; t < n; t++) {
		gets(S[t]);
	}
	for (int t = 0; t < n; t++) {
		l = strlen(S);  // длина строки S
		for (i = 0; i < l; i++) {
			if (S[t][i] == '#') {
				S[t][i] = 'B';
			}
			if (S[t][i] == '@') {
				S[t][i] = 'D';
			}
			if (S[t][i] == '*') {
				S[t][i] = 'G';
			}
			if (S[t][i] == '&') {
				S[t][i] = 'h';
			}
			if (S[t][i] == '$') {
				S[t][i] = 'n';
			}
			if (S[t][i] == '~') {
				S[t][i] = 'x';
			}
			if (S[t][i] == '%') {
				S[t][i] = 's';
			}
		}
		printf("%s\n", S[t]);
	}
	return 0;
}

Задача 7. Строка AB:

Вам даны несколько текстов. Найти в каждом из них количество вхождений строки AB. Определите строку, в которой подстрока AB встречается больше всего раз. Гарантируется, что строка AB есть как минимум в одной строке.
Входные данные:
Первая строка содержит одно целое число n (1 ≤ n ≤ 100) - количество текстов.
В следующих n строках записаны строки от 1 до 1000 символов - тексты.
Выходные данные:
Выведите индекс строки, у которой больше всего вхождений строки AB. Нумерация начинается с 1.

Пример:

Ввод Вывод
4
rreABFAB
ABArsq
krABfksABJAB
ABd
3

Задача 8. Сумма цифр:

Вам дан текст, определите сумму цифр в этом тексте.
Входные данные:
Единственная строка содержит строку до 1000 символов.
Выходные данные:
Выведите сумму цифр в этом тексте.

Пример:

Ввод Вывод
JK32e8gfS78d 28

Чтобы от номера символа цифры перейти к самой цифре нужно отнять от номера символа 48, так как в таблице цифры начинаются с символа 0, а его номер равен 48.

Пример на Си:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main() {
	int n, i, sum;
	char S[1000];
	gets(S);  
	n = strlen(S);  // длина строки S
	sum = 0;  // стартовое значение
	for (i = 0; i < n; i++) {
		if (S[i] >= '0' && S[i] <= '9') {
			sum = sum + (S[i] - 48);
		}
	} 
	printf("%i", sum);
	return 0;
}

Задача 9. Разделительная L:

Буква L считается разделительным символом, который делит строку на две части. Определите какая часть является наибольшей и выведите ее.
Входные данные:
Единственная строка содержит строку от 3 до 1000 символов.
Выходные данные:
В первой строке выведите размер наибольшей части.
Во второй строке выведите наибольшую строку.
Или в единственной строке выведите 0, если части равны.

Пример:

Ввод Вывод
JK32eL8gfS78d 7
8gfS78d

Задача 10. Сломанная клавиатура:

У Дениса опять проблемы с клавишей пробел, но в этот раз она вовсе сломалась. Поэтому он вместо пробела пишет две подряд идущих буквы ws (whitespace). Так как Денис ваш друг, вам нужно помочь ему отредактировать текст. Гарантируется, что первым и последним символом не является пробел.
Входные данные:
Единственная строка содержит строку от 4 до 10^5 символов.
Выходные данные:
Выведите текст Дениса с пробелами.

Пример:

Ввод Вывод
RGrfwsder RGrf der

Задача 11. Перевод с/с:

Вам даны числа в 16 системе счисления, вам нужно перевести каждое число из 16 с/с в 10 с/с.
Входные данные:
Первая строка содержит одно целое число t (1 ≤ t ≤ 100) - количество чисел.
В следующих t строках записаны числа длины от 1 до 10.
Выходные данные:
Выведите каждое число в 10 с/с.

Пример:

Ввод Вывод
4
10F9
6FB76C
534
413EA
4345
7321452
1332
267242

Пример на Си:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
 
int main() {
	char S[101][11];
	int t, i, j, l, r;
	long long int sum;
	scanf("%i", &t);
	for (int d = 0; d < t; d++) {
		scanf("%s", S[d]);
	}
	for (int d = 0; d < t; d++) {
		l = strlen(S[d]);  // длина строки S[d]
		r = 1;
		sum = 0;
		for (i = l - 1; i >= 0; i--) {
			if (S[d][i] >= '0' && S[d][i] <= '9') {
				sum += (S[d][i] - 48) * r;
			}
			else {
				sum += (S[d][i] - 55) * r;
			}
			r *= 16;
		}
		printf("%i\n", sum);
	}
	return 0;
}

Задача 12. Длинные числа:

Даны несколько текстов, нужно для каждого текста вывести самую длинную последовательность повторяющихся цифр. Гарантируется, что в каждом тексте есть самая большая такая последовательность.
Входные данные:
Первая строка содержит одно целое число t (1 ≤ t ≤ 100) - количество текстов.
В следующих t строках записаны строки от 1 до 1000 символов.
Выходные данные:
Выведите самую длинную последовательность повторяющихся цифр.

Пример:

Ввод Вывод
3
yr43erfd234t
eter531
r34RGS4g
234
531
34

Задача 13. Отрезок:

Вам дана строка, удалите отрезок между первым и последним вхождением буквы F. Гарантируется, что в строке есть как минимум две буквы F.
Входные данные:
Единственная строка содержит строку от 3 до 1000 символов.
Выходные данные:
Выведите строку без отрезка. Если такого отрезка не существует, выведите 0.

Пример:

Ввод Вывод
S43FrEFdcFgwQ S43FFgwQ
56fdFFde 0


Задача 14. Римские числа:

Вам даны n строк, содержащие буквы I(1), V(5), X(10), L(50). Если бо́льшая цифра стоит перед меньшей, то они складываются, если же меньшая стоит перед большей, то меньшая вычитается из большей. Необходимо для каждой строки перевести число из римской с/с в арабскую.
Входные данные:
Первая строка содержит одно целое число t (1 ≤ t ≤ 100) - количество строк.
В следующих t строках записаны строки до 10 символов.
Выходные данные:
Для каждого запроса выведите ответ.

Пример:

Ввод Вывод
4
XI
XXIV
XLI
III
11
24
41
3

Code.C © Copyright Павел Калашников 2021
обратная связь code.c04@mail.ru