Программирование / Заочники / Инфорамтика и программирование / Методичка (1 сем) / Урок 1
.7.pdf
Учебное задание 1.9.
Создать приложение, которое подсчитывает количество « счастливых» билетов,
а так же вероятность получения такого билета. Считать, что номер билета состоит
из 6-ти цифр, а счастливым является билет, у которого сумма первых трёх цифр
равна сумме следующих трёх цифр. Например, билет 084921 является счастливым,
т.к. 0+8+4 = 9+2+1 = 12.
Технология выполнения учебного задания 1.9.
Шаг 1. Создайте новый проект консольного приложения, назовите его Lab19.
Шаг 2. Переберём в цикле все возможные варианты билетов от 0 до 999999. Когда количество повторений заранее известно удобнее всего использовать цикл for. Далее представляем счётчик цикла (переменную i) в виде строки формата XXXXXX, это делается с помощью метода ToString с указанием формата “D6”. Метод ToString преобразовывают переменную в строковый тип (этот метод присутствует у переменной любого типа). Формат D6 допустим только для целочисленных значений. Число 6 в строке формата D6 означает, что число будет представлено 6-ю знаками, если число может быть представлено меньшим количеством знаков – незначимые позиции заполняются нулями. Например, число 123 в формате D6 будет выглядеть как 000123.
static void Main(string[] args)
{
//количество счастливых билетов int lucky = 0;
//перебираем все билеты
for (int i = 0; i < 999999; i++)
{
//представляем номер билета в формате XXXXXX string ticket = i.ToString("D6");
}
Console.ReadKey();
}
Листинг 4.
Шаг 3. Теперь нам нужно выделить из сформированной строки первые 3 цифры, найти их сумму, затем выделать следующие 3 цифры так же найти их сумму, если суммы совпадают – значит это и есть счастливый билет.
Для выделения из строки некоторой подстроки можно воспользоваться методом
Substring.
public string Substring(int startIndex, int length);
Аргумент |
Описание |
int startIndex |
номер позиции с которого будет выделяться подстрока |
|
(нумерация начинается с нуля). |
int length |
число символов в подстроке |
Примеры (здесь для наглядности используются неименованные константы, а не переменные).
"abcdef".Substring(1, 2); //вернёт "bc" "123456".Substring(3, 1); //вернёт "4" "abcdef".Substring(3, 3); //вернёт "def" "123456".Substring(0, 3); //вернёт "123" "abcdef".Substring(3, 4); //ошибка
Первый символ номера билета будет ticket.Substring(0, 1), второй символ ticket.Substring(1, 1) и.т.д.
Метод Substring возвращает строку, которую можно преобразовать с помощью методов класса Convert, т.е.
Convert.ToInt32(ticket.Substring(0, 1)) – это первый символ билета,
преобразованный в целое число типа int.
Теперь несложно найти сумму первых и вторых 3-х цифр. См. листинг 5.
static void Main(string[] args)
{
//количество счастливых билетов int lucky = 0;
//перебираем все билеты
for (int i = 0; i < 999999; i++)
{
//представляем номер билета в формате XXXXXX string ticket = i.ToString("D6");
//находим сумму первых 3-х цифр
int sum1 = Convert.ToInt32(ticket.Substring(0, 1)) + Convert.ToInt32(ticket.Substring(1, 1)) + Convert.ToInt32(ticket.Substring(2, 1));
//находим сумму вторых 3-х цифр
int sum2 = Convert.ToInt32(ticket.Substring(3, 1)) + Convert.ToInt32(ticket.Substring(4, 1)) + Convert.ToInt32(ticket.Substring(5, 1));
//если суммы совпадают - это счастливый билет if (sum1 == sum2) lucky++;
}
Console.WriteLine("Всего существует {0} счастливых билетов", lucky); Console.ReadKey();
}
Листинг 5.
Шаг 4. Рассчитаем вероятность получения такого билета. Вероятность рассчитывается очень просто – это количество « благоприятных» исходов, разделённое на общее количество возможных исходов. Например, вероятность достать белый шар из корзины, где находится 3 белых и 7 чёрных шаров равна 3/10 = 0.3 или 30%. Таким образом вероятность получить счастливый билет равна количеству счастливых билетов разделённое общее количество билетов.
Общее количество билетов равно 999999+1(нулевой билет) = 1000000.
Обратите внимание, что при вычислении вероятности мы делим не на целое
1000000, а вещественное 1000000.0. Самостоятельно разберитесь, зачем это
требуется. (код представлен в листинге 6).
Console.WriteLine("Всего существует {0} счастливых билетов", lucky); Console.WriteLine("Шанс получить счастливый билет равен {0}",
lucky / 1000000.0 * 100);
Console.ReadKey();
Листинг 6.
Шаг 5. Запустите программу, нажав клавишу F5. Убедитесь, что программа работает.
Самостоятельное задание 1.9.
Написать программу перевода чисел из двоичного формата в десятичный. Перевод должен осуществляться в положительные, целые числа. Правильность работы программы можно проверить на стандартном калькуляторе Windows в режиме Программист (меню Вид -> Программист).
Частный случай перевода:
10101010 = 1*27 +0*26 +1*25 +0*24 +0*23 +0*22 +0*21 +0*20 = 170
Пользователь может вводить двоичные числа с максимальной длиной в 64 символа.
Для определения длины строки используйте свойство Length (тип string). Ниже приведены примеры получения длины строки.
//Пример 1
Console.WriteLine("abcd".Length); //выведет 4 //Пример 2
string test = "1234567890";
for (int i = test.Length - 1; i >= 0; i--)
{
Console.Write(test.Substring(i, 1));
}//цикл выведет строку 1234567890 в обратном порядке, т.е. 0987654321 //Пример 3
string name = Console.ReadLine();
Console.WriteLine("Имя состоит из {0} символов", name.Length);
