Программа на Кумире прилагается.
#include <iostream>
using namespace std;
int main()
{
int n, i, m = 1;
double s = 0.0;
cin>>n;
for (i = 1; i <= n; s += double(m)/i, m = -m, i++);
cout<<s;
}<span>
</span>
Переформулируем задачу на теорию графов:
Если все вершины графа разделить на два множества, то найдется ребро, соединяющее вершину одного множества с вершиной другого. Доказать, что граф связный.
Докажем от противного. Пусть граф несвязный, тогда у него есть как минимум две компоненты связности. Тогда возьмем такое разбиение графа на группы: в первой группе будут только вершины первой компоненты связности, а в другой группе будут все остальные вершины. В таком случае, по условию задачи существует ребро из вершины первой группы в вершину второй, но это невозможно, так как вершины принадлежат к разным компонентам связности, а по определению между двумя разными компонентами связности нет ребер. Противоречие, следовательно, граф связный. Что и требовалось доказать.
<em>// PascalABC.NET 3.3, сборка 1555 от 21.10.2017</em>
<em>// Внимание! Если программа не работает, обновите версию!</em>
begin
ReadSeqReal('Вводите последовательность',ReadInteger('N=')).Reverse.Println
end.
<u>Пример</u>
N= 10
Вводите последовательность 5 9 3.15 -6.7 0 12 100 35 0.03 1e-20
1E-20 0.03 35 100 12 0 -6.7 3.15 9 5