Наталья записала алгоритм для чертёжника, но циклом "для" не пользовалась. Сформулируйте Условия для цикла "пока" и цикла "до", если известно, что узор состоит из 20 ромбов.
Если число 49 записывается как 121, значит первый остаток от деления равен 1, то есть основанием системы счисления является число, кратное 48.
121 имеет 3 разряда, значит основание однозначно меньше 10 и больше 2. Подходят 3, 4, 6, 8.
Учитывая, что в числе 121 три разряда, значит число 48 делилось всего три раза. Число 8 не подойдет, т.к. 48/8=6, значит будет всего два деления. Число 3 не подойдет, т.к. 48/3 = 16, 16/3=5 - то есть тут будет больше трёх знаков. Число 4 не подойдет, т.к. 48/4=12, а 12 делится на 4 без остатка, но, судя по числу, во втором делении остаток должен быть равен 2. Остаётся число 6. Проверим
49/6=8 |1 8/6 = 1 |2 1/6=0 |1
121(6)
Ответить на вопрос
Поделитесь своими знаниями, ответьте на вопрос:
Наталья записала алгоритм для чертёжника, но циклом "для" не пользовалась. Сформулируйте Условия для цикла "пока" и цикла "до", если известно, что узор состоит из 20 ромбов.
#include <iostream>
#include <vector>
#include <cmath>
#include <set>
using namespace std;
void swap(int *a, int *b){
int temp = *a;
*a = *b;
*b = temp;
}
signed main() {
set<pair<int,int>> s;
int n;
cin >> n;
vector<int> a(n);
for(int &i:a)
cin >> i;
int m;
cin >> m;
while(m--){
int x,y;
cin >> x >> y;
s.insert({x,y});
s.insert({y,x});
}
for(int i = 0; i < n; i++)
for(int j = 0; j < n - i - 1; j++)
if(a[j] > a[j+1] && s.find({a[j],a[j+1]}) == s.end())
swap(a[j],a[j+1]);
for(int &i:a)
cout << i << " ";
}