Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
61
Добавлен:
09.05.2015
Размер:
130.69 Кб
Скачать

Учебное задание 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);

Соседние файлы в папке Методичка (1 сем)