Модуль 1.5 (Цикл while) Данный модуль научит писать код, который позволяет автоматически повторять одни и те же действия несколько раз. В программировании повторение действий называется циклом.
Ниже представлены примеры задач с решением на C++ на тему Цикл while.
По данному целому числу N распечатайте все квадраты натуральных чисел, не превосходящие N, в порядке возрастания.
#include <iostream>
#include<cmath>
using namespace std;
int main()
{
int n, i;
cin >> n;
i = 1;
while (pow(i, 2) <= n) {
cout << pow(i, 2) << " ";
i += 1;
}
return 0;
}
Дано целое число, не меньшее 2. Выведите его наименьший натуральный делитель, отличный от 1.
#include <iostream>
#include <cmath>
using namespace std;
int MinDivisor(int n,int d=2){
if (d <= sqrt(n)){
if (n%d == 0){ return d; }
else MinDivisor(n, d + 1);
}
else return n;
}
int main(){
int n;
cin >> n;
cout << MinDivisor(n);
return 0;
}
По данному числу N распечатайте все целые степени двойки, не превосходящие N, в порядке возрастания.
#include <iostream>
#include<cmath>
using namespace std;
int main()
{
int n, i;
cin >> n;
i = 0;
while (pow(2,i) <= n) {
cout << pow(2, i) << " ";
i += 1;
}
return 0;
}
Дано натуральное число N. Выведите слово YES, если число N является точной степенью двойки, или слово NO в противном случае.
#include <iostream>
#include<cmath>
using namespace std;
int main()
{
int n, i;
cin >> n;
i = 0;
while (i <= 100) {
if (pow(2, i) == n) {
cout <<"YES";
break;
}
i += 1;
if (i == 100) {
cout << "NO";
}
}
return 0;
}
Программа получает на вход последовательность целых неотрицательных чисел, каждое число записано в отдельной строке. Последовательность завершается числом 0, при считывании которого программа должна закончить свою работу и вывести количество членов последовательности (не считая завершающего числа 0).
Числа, следующие за числом 0, считывать не нужно.
#include <iostream>
#include<cmath>
using namespace std;
int main()
{
int n, i;
n = 1;
i = 0;
while (n != 0) {
cin >> n;
i += 1;
}
cout << i-1;
return 0;
}
Определите сумму всех элементов последовательности, завершающейся числом 0.
#include <iostream>
#include<cmath>
using namespace std;
int main()
{
int n, sum;
n = 1;
sum = 0;
while (n != 0) {
cin >> n;
sum += n;
}
cout << sum;
return 0;
}
Последовательность состоит из натуральных чисел и завершается числом 0. Определите значение наибольшего элемента последовательности.
#include <iostream>
using namespace std;
int main()
{
int max,a;
cin>>a;
max=a;
while (a!=0){
if (a>max)
max=a;
cin>>a;
}
cout<<max;
return 0;
}
Последовательность состоит из натуральных чисел и завершается числом 0. Определите, какое количество элементов этой последовательности, равны ее наибольшему элементу.
#include <iostream>
#include<cmath>
using namespace std;
int main()
{
int n, max,i;
i = 0;
n = 1;
max = -1000;
while (n != 0) {
cin >> n;
if (max < n) {
max = n;
i = 1;
}
else if (max == n) {
i += 1;
}
}
cout << i;
return 0;
}
Последовательность состоит из натуральных чисел и завершается числом 0. Определите значение второго по величине элемента в этой последовательности, то есть элемента, который будет наибольшим, если из последовательности удалить наибольший элемент.
#include <iostream>
using namespace std;
int main() {
int i, n, m = 1;
cin >> n;
i = n;
while (n != 0) {
cin >> n;
if (n >= i){
m = i;
i = n;
}
else if (n >= m)
{
m = n;
}
else
{
continue;
}
}
cout << m;
return 0;
}
Последовательность Фибоначчи определяется так:
F(0) = 0, F(1) = 1, …, F(n) = F(n−1) + F(n−2).
По данному числу N определите N-е число Фибоначчи F(N).
#include <iostream>
#include<cmath>
using namespace std;
int main()
{
int n, f1, f2, i, tmp;
cin >> n;
i = 3;
f1 = 1;
f2 = 1;
while (i <= n) {
tmp = f1 + f2;
f1 = f2;
f2 = tmp;
i += 1;
}
cout << f2;
return 0;
}
Последовательность Фибоначчи определяется так:
F(0) = 0, F(1) = 1, …, F(n) = F(n−1) + F(n−2).
Дано натуральное число A. Определите, каким по счету числом Фибоначчи оно является, то есть выведите такое число N, что F(N) = A. Если А не является числом Фибоначчи, выведите число -1.
#include <iostream>
using namespace std;
int main() {
int N, f2 = 2, f1 = 1, i = 1, d = 0;
cin >> N;
while (i<=N) {
if (N == i) {
cout << f2;
return 0;
}
f2++;
d = i;
i+= f1;
f1 = d;
}
cout << -1;
}
Дана последовательность натуральных чисел, завершающаяся числом 0. Определите, какое наибольшее число подряд идущих элементов этой последовательности равны друг другу. Если не нашлось ни одной пары, тройки и т.д. элементов, равных друг другу, то программа должна вывести число 1.
#include <iostream>
using namespace std;
int main() {
int a = 1, p = 1, n = 0, i = 0;
while (a != 0) {
cin >> a;
if (a == n) {
p++;
}
if (i < p) {
i = p;
}
if (a != n) {
p = 1;
}
n = a;
}
cout << i;
return 0;
}
Элемент последовательности называется локальным максимумом, если он строго больше предыдущего и последующего элемента последовательности. Первый и последний элемент последовательности не являются локальными максимумами.
Дана последовательность натуральных чисел, завершающаяся числом 0. Определите количество строгих локальных максимумов в этой последовательности.
#include <iostream>
using namespace std;
int main()
{
int a,b=0,c=0,d=0;
while (cin>>a && a!=0)
{
if (b>a && b>c && c!=0) d++;
c=b;
b=a;
}
cout<<d;
}
Определите наименьшее расстояние между двумя локальными максимумами последовательности натуральных чисел, завершающейся числом 0. Если в последовательности нет двух локальных максимумов, выведите число 0.
Начальное и конечное значение при этом локальными максимумами не считаются.
Расстоянием считается количество пробелов между элементами. В качестве примера смотрите первый тест.
#include<iostream>
using namespace std;
int main() {
int prv, cur, nxt, pos = 0, prv_max = 0, min_len = 0, cur_len;
int count = 0;
if (cin>>prv && prv)
{
if (cin >> cur && cur)
{
if (cin >> nxt)
{
pos = 2;
while (nxt)
{
if ((prv < cur) && (cur > nxt))
{
if (prv_max != 0 )
{
cur_len = pos - prv_max;
if (min_len == 0)
min_len = cur_len;
else
min_len = min(min_len,cur_len);
}
prv_max = pos;
}
prv = cur;
cur = nxt;
cin >> nxt;
pos++;
}
}
}
}
cout<<min_len;
return 0;
}
Если у вас не отображается решение последних задач, значит у вас включен блокировщик рекламы который вырезает эти ответы
По данному числу k выведите все пары дружественных чисел, каждое из которых не превосходит k.c++