Для начала отметим, что переправа не состоится только в одном случае : если число разбойников будет превышать число купцов на берегу.
Итак, пусть берег, на котором стоят три купца и три разбойника , будет называться первым, а берег на который нужно перебраться - вторым. Попробуем вместить в двухместную лодку двух купцов, тогда на первом берегу останется 1 купец и 3 забойника, по условию это недопустимо, идем дальше: в лодку садятся один купец и один разбойник, на берегу остаются два купца и два разбойника, этот расклад нам подходит с него и начнем.
1 рейс- в лодку садятся 1 купец и 1 разбойник и переправляются на второй берег, на нем оставим купца(1 разбойник всегда будет находиться в лодке и переправлять остальных) На первом берегу 2 купца, 2 разбойника(2к;2р)
2 рейс - возвращение к первому берегу
3 рейс- в лодку садится 1 разбойник, т. к. если сядет 1 купец то разбойников на первом берегу будет больше, переправа на второй берег (2к;1р)
4 рейс - возвращение
5 рейс - в лодку садится 1 купец, (1к;1р), переправа
6 рейс - возвращение
7 рейс -в лодку садится 1 разбойник (1к;0 р), переправа
8 рейс - возвращение
9 рейс - в лодку садится 1 купец (0к;0р), переправа 1 купца и 1 разбойника
ответ:Переправа состоялась за 9 рейсов, пострадавших не обнаружено.
как то так)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//Напишите программу,которая в последовательности целых чисел определяет количество чисел,кратных 5 или 9.
//Программа получает на вход целые числа,количество введённых чисел неизвестно,последовательность чисел заканчивается числом 0.
//Количество чисел не превышает 1000.Введённые числа по модулю не превышают 30 000.Программа должна вывести одно число:количество чисел,кратных 5 или 9.
int n = 0; // количество
int a = int.Parse(Console.ReadLine());
while (a != 0)
{
if (a % 5 == 0 || a % 9 == 0)
n++;
a = int.Parse(Console.ReadLine());
}
Console.WriteLine(n);
Console.ReadKey();
}
}
}