Главная страница
Навигация по странице:

  • Найти наименьшее общее кратное для всех элементов массива - минимальное число, которое делится на все элементы массива без остатка.

  • . Найти все трехзначные числа Армстронга.

  • Найти наименьшее общее кратное для всех элементов массива минимальное число, которое делится на все элементы массива без остатка


    Скачать 37.93 Kb.
    НазваниеНайти наименьшее общее кратное для всех элементов массива минимальное число, которое делится на все элементы массива без остатка
    Дата22.05.2022
    Размер37.93 Kb.
    Формат файлаdocx
    Имя файлаZadachi_1.docx
    ТипДокументы
    #543386

    Задачи

    Задачи оформляются в виде функций с передачей всех входных и выходных данных через формальные параметры и результат. Задачи, работающие со строками, по заданию преподавателя реализовать либо с использованием массивов char[], либо с использованием указателей char* и операций вида *p++. Для  функции привести пример вызова из main со статическими  входными параметрами.

    1. Найти наименьшее общее кратное для всех элементов массива - минимальное число, которое делится на все элементы массива без остатка.

    int f( int A [])

    {

    constint n = 10;

    inti, nok = 1, j;

    for (i = 0; i
    {

    j = A[i];

    if (j
    j = nok;

    for (; j <= nok*A[i]; j++)

    {

    if (j%A[i] == 0 &&j%nok == 0)

    {

    nok = j;

    break;

    }

    }

    }

    returnnok;

    }

    2.Написать функцию проверки, является ли заданное число простым. С ее помощью написать программу поиска простых чисел в диапазоне 1000-2000, две любые части которого - также простые (например, 1997, 1-997,19-97,199-7)

    bool simple(intx)

    {

    int n = 0;

    for (n = 2; n
    {

    if (x%n == 0) break;// перебор всех значени n до первого деления без остатка

    }

    if (n == x) returntrue;

    elsereturnfalse;

    }

    int f(intA[])

    {

    int c = 0;

    for (int i = 1000; i < 2000; i++)

    {

    int temp = i,j=1,k=0; bool good = false;

    if (simple(temp) == true)

    good = true;

    else good = false;

    if (simple(temp / 1000) == true&& simple(temp % 1000))

    good = true;

    else good = false;

    if (simple(temp / 100) == true&& simple(temp % 100))

    good = true;

    else good = false;

    if (simple(temp / 10) == true&& simple(temp % 10))

    good = true;

    else good = false;

    if (good = true)

    {

    A[c] = i;

    c++;

    }

    }

    return c;

    }

    3.      Сформировать массив простых чисел в диапазоне от 2 до заданного. Очередное простое число определяется попыткой деления нацело числа на все уже накопленные простые числа.

    void Mas(int n){

    int A[n]; // создается массив для простых чисел

    int i=1, j,k; // i-счетчик; j-переменная для перебора чисел от 2 до n; k-переменная для подсчета элементов массива

    bool check;

    A[i]=2; // по условию сказанно что первым элементом мас. будет 2

    k=i;

    for(j=3; j
    for(i=1; i
    if(j%A[i]!=0){ // проверка

    check=true;

    }

    else{

    check=false;

    break; // если j делится хотя бы на один из уже имеющихся простых чисел из массива то цикл сбрасывается

    }

    }

    if(check==true){ // если j прошла проверку то это число вносится в массив

    A[k+1]=j;

    k++;

    }

    }

    for(i=1; i<=k; i++){ // вывод массива

    cout << A[i] << endl;

    }

    }

    4.Любая целочисленная денежная сумма n>7 может быть выдана без сдачи “трешками” и “пятерками”. Программа находит эти числа для заданного n.

    void S(int n){

    int m3,m5;

    m3=m5=0;

    while(n%3!=0 && n%5!=0){

    n=n-3;

    m3++;

    }

    if(n%3==0)

    m3=n/3;

    if(n%5==0)

    m5=n/5;

    cout << "m3=" << m3 << endl << "m5=" << m5 << endl;

    }
    5.      На заданном интервале найти все числа, цифры которых находятся в строго возрастающем порядке (например, 532).

    int func(int a, int b){

    int k=0, i, n, x, i2; // k-счетчик искомых чисел; i-переменная для перебора чисел в заданном диапазоне

    bool check;

    for(i=a; i
    x=i; // x-переменная для проведения мат. операций с числом

    n=1;

    while(x/10!=0){

    x=x/10;

    n++; // n-считает кол-во цифр в числе

    }

    x=i; // возвращаем х исходное значение

    for(int i2=1; i2
    if((x%10)<((x/10)%10)){ // проверяем находятся ли цифры в возраст порядке

    x=x/10;

    check=true;

    }

    else{

    check=false;

    break; // если число не проходит проверку, цикл проверки завершается и происходит переход к следующему числу

    }

    }

    if(check==true) // если проверка пройдена счетчик чисел увелич.

    k++;

    }

    return k;

    }

    6.Число Армстронга – такое число из k цифр, для которого сумма k-х степеней его цифр равна самому этому числу, например 153=13+53+33. Найти все трехзначные числа Армстронга.
    void func(){

    int i, a, b, c; // a b c это цифры числа

    for(i=100; i<999; i++){ // i перебирает все трехзначные числа

    a=i/100;

    a=a*a*a;

    b=(i/10)%10;

    b=b*b*b;

    c=i%10;

    c=c*c*c;

    if((a+b+c)==i) // является ли это число, числом Армстронга

    cout << a+b+c << endl; // если да, то оно выводится

    }

    }

    7.Найти все двухзначные (трехзначные) числа, которые совпадают с последними цифрами своих квадратов, например, 252=625, 762=5676.

    void func(){

    int i, x;

    for(i=10; i<99; i++){ // i перебирает числа

    x=i*i; // возведение числа в квадрат и присваивание занения переменной х

    if(x%100==i) // проверка заданного условия

    cout << x << "---" << i << endl; // вывод квадрата и числа при прохождении условия

    }

    // то же самое, только для трехзначных

    for(i=100; i<999; i++){

    x=i*i;

    if(x%1000==i)

    cout << x << "---" << i << endl;

    }

    }

    8.Число называется совершенным, если оно равно сумме всех своих делителей, например, 6=1+2+3, 28=1+2+4+7+14. Найти все совершенные числа в заданном интервале.

    void func(int a, int b){

    int i, i2, x;

    for(i=a; i
    i2=1;

    x=0;

    while(i2<(i-1)){ // в цикле сумируются делители числа

    if(i%i2==0)

    x=x+i2;

    i2++;

    }

    if(x==i) // проверка условия Идеального числа

    cout << i << endl; // вывод числа

    }

    }

    9.Найти все числа в заданном диапазоне, которые делятся на любую из своих цифр.

    int f(inta,intb,intB[])

    {

    int c = 0;

    for (int i = a; i
    {

    int temp = i, n = 0, s = 0;

    int A[30];

    for (int t = temp; t!=0; n++,t/=10);

    for (int j = 0, ch = temp; j < n; j++)

    {

    A[j] = ch % 10;

    ch /= 10;

    }

    for (int j = 0; j < n && s == 0 && A[j]!=0; j++)

    {

    if (temp%A[j] == 0)

    s = 0;

    else s = 1;

    }

    if (s == 0)

    {

    B[c] = temp;

    c++;

    }

    }

    return c;

    }

    10.Найти числа в диапазоне 100-10000, для которых куб суммы цифр равен значению самого числа (например, 512 - 5+1+2=8).

    void func(){

    int i, a, b, c, d; // a b c d это цифры числа

    for(i=100; i<999; i++){ // i перебирает все трехзначные числа

    a=i/100;

    b=(i/10)%10;

    c=i%10;

    if(((a+b+c)*(a+b+c)*(a+b+c))==i) // подходит ли число под заданное условие

    cout << i << endl; // если да, то оно выводится

    }

    // то же самое только для тысяч

    for(i=1000; i<9999; i++){

    a=i/1000;

    b=(i/100)%10;

    c=(i/10)%10;

    d=i%10;

    if(((a+b+c+d)*(a+b+c+d)*(a+b+c+d))==i)

    cout << i << endl;

    }

    }

    11.Разложить число на простые множители (например 36=3*3*2*2). Результат – последовательность множителей в массиве, ограниченная 0.

    int func(int x){

    int A[x]; // создаем массив для множителей

    int i=1;

    if((x%2!=0)&&(x%3!=0)&&(x%5!=0)&&(x%7!=0)) // проверка, является ли число простым

    cout << "eror" << endl;

    while(x%2==0){ // деление числа на каждую простую цифру

    x=x/2;

    A[i]=2;

    i++;

    }

    while(x%3==0){

    x=x/3;

    A[i]=3;

    i++;

    }

    while(x%5==0){

    x=x/5;

    A[i]=5;

    i++;

    }

    while(x%7==0){

    x=x/7;

    A[i]=7;

    i++;

    }

    if(x==1){ // если после деления на все цифры число стало равно 1 то циклом выводится массив

    x=i;

    for(i=1; i
    cout << A[i] << endl;

    }

    }

    else{ // если нет, значит осталось простое число которое так же вносится в массив, который выводится циклом

    A[i]=x;

    x=i;

    for(i=1; i<=x; i++){

    cout << A[i] << endl;

    }

    }

    }

    12.Определить в массиве максимальную длину последовательности расположенных подряд возрастающих значений и возвратить индекс ее начала.ЗАМЕТКА – функция возвращает длину последовательности а переменная по ссылке ее индекс

    int f(intB[],intn,int&d)

    {

    int c = 0, l = 0; int A[256],t = 0;

    bool up = false;

    for (inti = 0; i
    {

    if (B[i + 1] >B[i])

    l++;

    else

    {

    A[i-l] = l+1;

    l = 0;

    }

    }

    int max = A[0];

    for (inti = 0; A[i] != 0;i++)

    if (A[i] > max)

    {

    max = A[i];

    d = i;

    }

    returnmax;

    }


    13.Подсчитать количество слов в строке.

    int str(char B[]){

    int k=0;

    int i=1;

    while(B[i]!=0){

    i++;

    if(B[i]==' ' || B[i]==0)

    k++;

    }

    return k;

    }

    14.Найти в строке слово минимальной длины и возвратить индекс его начала.

    void str(char B[]){

    int k1=0, k2=0;

    int i=0, l=1;

    while(B[i]!=0){

    if(B[i]==' '){

    if(k1
    k2=k1;

    l=i;

    }

    k1=-1;

    }

    k1++;

    i++;

    }

    cout << k2 << endl << l << endl;
    }

    15.Оставить в строке по одному пробелу между словами.

    void f(charB [])

    {

    intcuri = 0, curn = 0, count = 0; int A[128];

    while (B[curi - 1] != 0){
    if (B[curi]==32)

    curn++;

    elseif (curn> 1)

    {

    A[curi - curn] = curn;

    count++;

    inti = curi-curn;

    while (B[i])

    {

    B[i] = B[i + curn - 1];

    i++;

    }

    curn = 0;

    curi -= curn;

    }

    curi++;

    }

    }

    16.  Возвратить индекс начала фрагмента, симметричного относительно центрального символа (например, "abcba"), и имеющего максимальную длину. Длину фрагмента возвратить по ссылке.

    17.  "Перевернуть" в строке все слова. (Например: "Жили были дед и баба" - "илиЖилиб дед и абаб").

    void f(charB[])

    {

    char temp[256];

    intcuri = 0, curn = 0, count = 0;

    while (B[curi - 1] != 0){
    if (isalnum(B[curi]))

    curn++;

    elseif (curn> 0)

    {

    for (int j = 0, t = curi-1; j
    temp[j] = B[t];

    for (int j = curi-curn,t=0; j
    B[j] = temp[t];

    count++;

    curn = 0;

    }

    curi++;

    }

    }

    18.  Преобразовать целое из внутренней формы во внешнюю в шестнадцатеричной СС.

    void f(charB[], intx)

    {

    int A[10], temp = 0, n = 0;

    char tem [15];

    temp = x;

    for (int t = temp; t != 0; n++, t /= 10);

    for (int j = n-1, ch = temp; j+1 > 0; j--)

    {

    A[j] = ch % 10;

    ch /= 10;

    }

    inti = 0;

    for (; i< n; i++)

    {

    if (A[i] <= 9)

    {

    B[i] = A[i] + '0';

    }

    elseB[i] = A[i] - 10 + 'A';

    }

    }

    19.  Преобразовать число в шестнадцатеричной СС из внешней формы во внутреннюю.

    void f(charB[],intC[],intn)

    {

    int A[10];

    inti = 0;

    for (; i
    {

    if (B[i] >= '0'&&B[i] <= '9')

    C[i] = B[i] - '0';

    elseif (B[i] >= 'A'&&B[i] <= 'F')

    {

    C[i] = B[i] - 'A' + 10;

    }

    }

    }
    20.  Преобразовать дробную часть переменной типа double во внешнюю форму представления (строку символов).
    21.  В строке находится символ “точка” и символы-цифры дробной части числа. Преобразовать во внутреннюю форму представления (переменную типа double).

    22.  Найти в строке два одинаковых фрагмента, не содержащих пробелы и имеющих максимальную длину и возвратить индекс начала первого из них.

    23.  В строке,  содержащей   абзац текста, найти концы  предложений,  обозначенный  символом  "точка". В  следующих за ними  словах  первую строчную  букву  заменить   на прописную. Между словами количество пробелов может быть любым.

    24.  Заменить  в  строке  все восьмеричные целые константы на символы с соответствующими кодами, (например,  101 на A). 

    25.  Найти слово, начинающееся с самой младшей латинской буквы и возвратить индекс его начала.

    26.Удалить из строки комментарии вида "/* ... */". Игнорировать вложенные комментарии.

    void f(charc [])

    {

    int k = 0;

    for (inti = 0; i
    {

    if (c[i] == '/'&&c[i + 1] == '*'&&k==0)

    {

    k+=1;

    c[i] = ' ';

    c[i + 1] = ' ';

    }

    if (c[i] == '/'&&c[i - 1] == '*'&&k == 1)

    {

    c[i] = ' ';

    c[i - 1] = ' ';

    k = 0;

    }

    }

    }

    27.  Заменить  в  строке все большие латинские буквы на соответствующие им шестнадцатеричные коды (например,  А на 0x41, в константе использовать 2 цифры для представления байта).

    28.  Заменить в строке все целые константы из 1-2 цифр соответствующим повторением следующего за ними символа (например "abc5xacb15y" - " abcxxxxxacbyyyyyyyyyyyyyyy ").

    int f(charB[])

    {

    int s = 0, curn = 0, c = 0, maxcurn = 0; int A[128];

    for (inti = 0; i
    {

    if (B[i] == B[i + 1])

    curn++;

    elseif (curn>1)

    {

    A[i - curn] = curn;

    if (curn>maxcurn)

    {

    maxcurn = curn;

    c = i - maxcurn;

    }

    int temp = curn;

    if (temp / 10 >= 1)

    {

    B[c] = temp % 10 + '0';

    temp /= 10;

    B[c-1] = temp % 10 + '0';

    for (inti = c + 3; i
    B[i] = B[i + maxcurn];

    }

    elseif (temp / 10 == 0)

    {

    B[c+1] = temp + '0';

    for (inti = c+2; i
    B[i] = B[i + maxcurn+1];

    }

    curn = 0;

    }

    }

    returnstrlen(B)-2;

    }
    29.  Найти в строке и удалить из нее последовательность повторяющихся символов максимальной длины (например, "abcxxxxxacbyyyyyyyyyyyyyyyz" - "abcxxxxxacbz").

    int f(charB[])

    {

    int s = 0, curn = 0, c = 0, maxcurn = 0; int A[128];

    for (inti = 0; i
    {

    if (B[i] == B[i + 1])

    curn++;

    elseif (curn>1)

    {

    A[i - curn] = curn;

    if (curn>maxcurn)

    {

    maxcurn = curn;

    c = i - maxcurn;

    }

    curn = 0;

    }

    }

    for (inti = c; i
    B[i] = B[i + maxcurn+1];

    returnstrlen(B);

    }
    30.  Найти в строке наиболее часто встречающийся символ и заменить его на пробел.

    31.  Найти все вхождения подстроки в строке. Строка и подстрока заданы в массивах символов. Результат – массив, заполненный индексами начала подстроки в строке, последовательность ограниченна -1.

    32.  Найти в строке самую внутреннюю пару скобок и возвратить индекс открывающейся, например “a(bb(c(d)e(f   ggg)h)))(d)”.

    33.  Сортировка выбором. Выбирается минимальный элемент в массиве и запоминается. Затем удаляется, а все последующие за ним элементы до конца массива сдвигаются на один влево. Сам элемент заносится на освободившуюся последнюю позицию.


    void F33(int A[], int n){
    bool kp;
    int n2 = n - 1;
    int i, j, minmin = INT_MAX, pos, curmin = 0;
    for (i = 0; i < n; i++){
    for (j = 0; j < n; j++){
    if (A[j] <= A[j+1]){
    if (A[j] < minmin && A[j] > curmin){
    minmin = A[j];
    pos = j;
    kp = true;
    }
    }
    else{
    if (A[j] < minmin && A[j] > curmin){
    minmin = A[j];
    pos = j;
    kp = true;
    }
    }
    }
    if (kp){
    for (pos; pos < n2; pos++){
    A[pos] = A[pos + 1];
    }
    curmin = minmin;
    A[pos] = curmin;
    }
    kp = false;
    minmin = INT_MAX;
    }
    }


    34.  Сортировка выбором. Выбирается минимальный элемент в массиве и запоминается. Затем удаляется, а все последующие за ним элементы массива сдвигаются на один влево. Сам элемент переносится в новый массив.

    35.  Сортировка выбором. Выбирается минимальный элемент в массиве и запоминается. Затем на его место записывается «очень большое число», например, максимальное +1. Сам элемент переносится в новый массив.

    36.  Сортировка выбором. Выбирается максимальный элемент из оставшихся и меняется с последним из них  (обратить внимание на диапазон неупорядоченной части).
    void F36(int A[], int n){

    bool op;

    int i, j, max = 0, pos, curmax = INT_MAX;

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

    for (j = 0; j < n; j++){

    if (A[j] > A[i]){

    if (A[j] > max && A[j] < curmax){

    max = A[j];

    pos = j;

    op = true;

    }

    }

    else{

    if (A[j] > max && A[j] < curmax){

    max = A[j];

    pos = j;

    op = true;

    }

    }

    }

    curmax = max;

    max = 0;

    if (op){

    A[pos] = A[n - 1 - i];

    A[n - 1 - i] = curmax;

    op = false;

    }

    }

    }
    37.  Сортировка выбором. Выбирается минимальный элемент из оставшихся и меняется с первым из них  (обратить внимание на диапазон неупорядоченной части).

    38.Сортировка подсчетом. Выходной массив заполняется значениями “-1”. Затем для каждого элемента определяется его место в выходном массиве путем подсчета количества элементов строго меньших данного. Естественно, что все одинаковые элементы попадают на одну позицию, за которой следует ряд значений “-1”. После чего оставшиеся в выходном массиве позиции со значением “-1” заполняются копией предыдущего значения.

    void f(intA[],intB[],intn)

    {

    inti, k, j;

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

    B[i] = -1; // Выходной массив заполняется значениями “-1”.

    for (i = 0; i
    {

    k = 0;

    for (j = 0; j
    {

    if (A[j]
    k = k++; // выходном массиве путем подсчета количества

    // элементов строго меньших данного

    }

    B[k] = A[i]; // присваивает значение элементу массива b

    }

    for (i = 1; i
    {

    if (B[i] == -1) // значением «-1» заполняется копией предыдущего

    B[i] = B[i - 1]; // значения

    }

    }

    39.  Сортировка вставками. Берется очередной элемент и извлекается из массива. Затем от начала массива ищется первый элемент, больший данного. Все элементы, от найденного до очередного сдвигаются на один вправо и на освободившееся место помещается очередной элемент. (Поиск места включения от начала упорядоченной части).

    40.  Сортировка вставками («всплытием»). Берется предпоследний элемент и меняется со следующим, пока не закончится массив и пока следующий будет меньше текущего. Затем берется предыдущий и т.д..

    41.  Сортировка вставками. Берется очередной элемент массива. Затем от начала выходного массива ищется первый элемент, больший данного. Все элементы, от найденного до последнего сдвигаются на один вправо и на освободившееся место помещается очередной элемент.

    42.  Сортировка выбором. Выбирается минимальный элемент в массиве и переносится в новый массив. Затем на его место записывается последний элемент исходного массива.


    написать администратору сайта