
Осуществил с того что я умею, сложного не использовал ибо еще не дошел до него . Тут 2 класса идут в двух разных .cs .
Единственные нюансы: 1) не осуществил год до нашей эры, т.е если год вводится -2 (2 до н.е) выводится 2.
2) запутанность жесткая, ибо использовал goto и много переменных разных. с моими текущими знаниями я не мог использовать что то попроще, возможно оптимизируете.
1 класс:
using System;
namespace HomeLibrary
{
class ListOfBooks
{
static string Author, Category, Name; static int Year;
public static bool Indicate, SecondIndicate, ThirdIndicate;
public static string SetAuthor
{
get
{
return Author;
}
set
{
if (string.IsNullOrWhiteSpace(value) || int.TryParse(value, out int WrongValue))
{
Indicate = true;
}
else
{
Author = value;
}
}
}
public static int SetYear
{
get
{
return Year;
}
set
{
if(value >= 0 && value <= 2022)
{
Year = value;
}
}
}
public static string SetCategory
{
get
{
return Category;
}
set
{
if (string.IsNullOrWhiteSpace(value) || int.TryParse(value, out int WrongValue))
{
SecondIndicate = true;
}
else
{
Category = value;
}
}
}
public static string SetName
{
get
{
return Name;
}
set
{
if (string.IsNullOrWhiteSpace(value) || int.TryParse(value, out int WrongValue))
{
ThirdIndicate = true;
}
else
{
Name = value;
}
}
}
}
}
2 класс.
using System;
using System.Collections.Generic;
namespace HomeLibrary
{
class Program
{
static void SecondMenue(int SecondChoise)
{
switch(SecondChoise)
{
case 2:
List<string> Books = new List<string>();
TryAgain4:
Console.WriteLine("Введите название книги.");
ListOfBooks.SetName = Console.ReadLine();
if (ListOfBooks.ThirdIndicate == true)
{
Console.WriteLine("Попробуйте ещё раз. Некорректное значение.");
ListOfBooks.ThirdIndicate = false;
Console.ReadLine();
goto TryAgain4;
}
TryAgain:
Console.WriteLine("Введите имя/псевдоним автора.");
ListOfBooks.SetAuthor = Console.ReadLine();
if ( ListOfBooks.Indicate == true)
{
Console.WriteLine("Попробуйте ещё раз. Некорректное значение.");
ListOfBooks.Indicate = false;
Console.ReadLine();
goto TryAgain;
}
TryAgain2:
string YearString;
Console.WriteLine("Введите год выпуска книги.");
YearString = Console.ReadLine();
if (!(int.TryParse(YearString, out int Year)))
{
Console.WriteLine("Попробуйте ещё раз. Некорректное значение.");
Console.ReadLine();
goto TryAgain2;
}
ListOfBooks.SetYear = Year;
TryAgain3:
Console.WriteLine("Введите категорию книги.");
ListOfBooks.SetCategory = Console.ReadLine();
if (ListOfBooks.SecondIndicate == true)
{
Console.WriteLine("Попробуйте ещё раз. Некорректное значение.");
ListOfBooks.SecondIndicate = false;
Console.ReadLine();
goto TryAgain3;
}
Books.Add($"Книга: {ListOfBooks.SetName}, Автор: {ListOfBooks.SetAuthor}, Год: {ListOfBooks.SetYear}, Категория: {ListOfBooks.SetCategory}.");
Console.WriteLine("Книга успешно добавлена в вашу библиотеку.");
string ChoiceAfter;
TryAgain5:
Console.WriteLine("Желаете добавить ещё книгу - 2 , посмотреть список книг - 3, закончить - 4 .");
ChoiceAfter = Console.ReadLine(); if (int.TryParse(ChoiceAfter, out int Choice) && Choice == 2) goto TryAgain4;
else if(Choice == 3)
{
Console.WriteLine("Список ваших книг:");
foreach(string Book in Books)
{
Console.Write($"\n{Book}");
Console.ReadLine();
}
goto TryAgain5;
}
else if(Choice == 4)
{
Console.WriteLine("Всего доброго!");
Console.ReadLine();
return;
}
break;
case 4:
Console.WriteLine("Всего доброго!");
Console.ReadLine();
return;
}
}
static void Menue(int UserNumber)
{
TryAgainX2:
switch (UserNumber)
{
case 1:
string ChoiseString;
Console.WriteLine("Добавить книгу - 2 , Закончить работу - 4 .");
ChoiseString = Console.ReadLine();
int.TryParse(ChoiseString, out int Choise); if (Choise >= 2 && Choise <= 4) SecondMenue(Choise);
break;
default:
Console.WriteLine("Некорректное значение");
goto TryAgainX2;
break;
}
}
static void Main(string[] args)
{
TryAgain:
string ChoiceFirst;
Console.WriteLine("Здравствуйте, Вас приветсвует домашняя библиотека. Открыть меню команд - 1");
ChoiceFirst = Console.ReadLine();
if (int.TryParse(ChoiceFirst, out int Choice) && Choice == 1) Menue(Choice);
else
{
Console.WriteLine("Неверное значение, попробуйте ещё раз.");
goto TryAgain;
}
Console.ReadLine();
}
}
}
Такое значение S — 30. При S = 30 Петя своим первым ходом может получить одну из четырёх позиций: (7, 31), (8, 30), (14, 30), (7, 60).
В позиции (7, 60) Ваня удваивает количество камней во второй куче и выигрывает своим первым ходом.
Из позиций (14, 30) и (7, 31) Ваня может получить позицию (14, 31). В этом случае после второго хода Пети может возникнуть одна из четырёх позиций: (15, 31), (14, 32), (28, 31), (14, 62). Во всех случаях Ваня удваивает количество камней во второй куче и выигрывает своим вторым ходом.
Из позиции (8, 30) Ваня своим первым ходом может получить позицию (16, 30). После второго хода Пети может возникнуть одна из четырёх позиций: (17, 30), (16, 31), (32, 30), (16, 60). Во всех случаях Ваня удваивает количество камней во второй куче и выигрывает своим вторым ходом.
Таким образом, ответ — 30.
ответ: 30.
Примечание. Докажем, что при S ≤ 29 либо выигрывает Петя своим первым или вторым ходом, либо игра не завершится за 4 хода.
При S ≤ 7 Петя своим первым ходом может добавить в большую кучу один камень. Тогда, даже если изначально S = 7, наибольшее количество камней, которое можно получить суммарно в обеих кучах за 4 хода, каждый раз удваивая большую кучу, равняется 71.
При 8 ≤ S ≤ 16 Петя может выбрать такую стратегию, которая не позволит победить Ване за один или два хода. Для этого Петя каждый ход может прибавлять к первой куче один камень. При этом наибольшее суммарное количество камней в обеих кучах, которое можно получить за 4 хода, равно 9 + 64 = 73.
При S = 17. Петя первым ходом может получить позицию (7, 18). Из этой позиции Ваня может получит позиции (8, 18), (7, 19), (14, 18) и (7, 36). В позиции (7, 36) Петя выигрывает своим вторым ходом. В остальных позициях у Пети есть стратегия, которая позволяет ему получить позиции, из которых Ваня не сможет выиграть своим вторым ходом.
При 18 ≤ S ≤ 29 Петя может получить позицию (8, S). В этой позиции Петя либо выигрывает своим вторым ходом, либо у него есть стратегия, которая позволяет ему получить позиции, в которых Ваня не может выиграть своим первым или вторым ходом.