Tatianamir765654
?>

2. В программе My7_2 реализован процесс, относительно которого выдвинута так называемая гипотеза Сиракуз. Это процесс последовательного преобразования натурального числа n в 1. Запустив программу, проверяем ее работу при не- скольких значениях n и видим, что предусмотренный резуль- тат каждый раз достигается. Отсюда мы делаем предположе- ние, что работа программы завершится, то есть результат будет получен при любом значении n. Однако с достовернос- тью это неизвестно, доказательство факта завершения работы программы (алгоритма) при любом значении n до сих пор ни- кем не получено7 . Другими словами, есть алгоритм (програм- ма), но его конечность, завершаемость работы во времени — открытый вопрос, требующий своего обоснования. Мораль: проверка циклов типа While требует особо тщательной рабо- ты, ибо подобные циклы «потенциально бесконечны во време- ни». Program My7_2; Var n:Integer; Begin WriteLn('Введите натуральное число:'); ReadLn(n); Write(n); While n<>1 Do Begin If n Mod 2=0 Then n:=n Div 2 Else n:=(3*n+1) Div 2; Write(' - ', n); End; ReadLn; End. Последовательно запуская программу, оцените среднюю длину получаемых цепочек чисел при изменении n от 2 до 20. Как избавиться от этой ручной работы по многократному запуску программы? Рассматривая полученные цепочки чисел, нетрудно заме- тить, что фрагменты этих цепочек часто повторяются. Напри- мер, 8421, 5168421. Как использовать этот факт при подсчете средней длины цепочек для чисел (n) из большого интервала, например типа Integer? Потребуется ли в этом случае что-либо изменять в приведенном фрагменте про- граммы?

Информатика

Ответы

Алексеевич949

#include <iostream>

#include <vector>

using namespace std;

void insertionSort(vector<int> &a_){

   vector<int> t;

   int n = a_.size();

   for(int i = 0; i < n; i++){

       int u = i;

       for(int j = i + 1; j < n; j++)

           if(a_[j] < a_[u])

               u = j;

       swap(a_[i], a_[u]);

       if(!(a_[i] & 1))

           t.push_back(a_[i]);

   }

   a_ = t;

}

void solve(){

   vector<int> a = {-2, 4, 10, -1, 1, 6, 3, 7, 8, 5};

   insertionSort(a);

   cout << "a = {";

   for(int i = 0; i < a.size() - 1; i++)

       cout << a[i] << ", ";

   cout << a.back() << "}";

}

int main(){

   solve();

}

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

2. В программе My7_2 реализован процесс, относительно которого выдвинута так называемая гипотеза Сиракуз. Это процесс последовательного преобразования натурального числа n в 1. Запустив программу, проверяем ее работу при не- скольких значениях n и видим, что предусмотренный резуль- тат каждый раз достигается. Отсюда мы делаем предположе- ние, что работа программы завершится, то есть результат будет получен при любом значении n. Однако с достовернос- тью это неизвестно, доказательство факта завершения работы программы (алгоритма) при любом значении n до сих пор ни- кем не получено7 . Другими словами, есть алгоритм (програм- ма), но его конечность, завершаемость работы во времени — открытый вопрос, требующий своего обоснования. Мораль: проверка циклов типа While требует особо тщательной рабо- ты, ибо подобные циклы «потенциально бесконечны во време- ни». Program My7_2; Var n:Integer; Begin WriteLn('Введите натуральное число:'); ReadLn(n); Write(n); While n<>1 Do Begin If n Mod 2=0 Then n:=n Div 2 Else n:=(3*n+1) Div 2; Write(' - ', n); End; ReadLn; End. Последовательно запуская программу, оцените среднюю длину получаемых цепочек чисел при изменении n от 2 до 20. Как избавиться от этой ручной работы по многократному запуску программы? Рассматривая полученные цепочки чисел, нетрудно заме- тить, что фрагменты этих цепочек часто повторяются. Напри- мер, 8421, 5168421. Как использовать этот факт при подсчете средней длины цепочек для чисел (n) из большого интервала, например типа Integer? Потребуется ли в этом случае что-либо изменять в приведенном фрагменте про- граммы?
Ваше имя (никнейм)*
Email*
Комментарий*

Популярные вопросы в разделе

oldprince840
lion13
l250sp70
miss1380
nailya-abdulova25
iraimironova
nzagrebin363
kim-1971
ooo-helpvet44
osandulyak
Эдуардович873
gordeevadesign2986
cvetyzelen283
okarp
Olia72