БлогNot. C++: 5 сегодняшних учебных задачек

C++: 5 сегодняшних учебных задачек

Конечно, частично подобное было. Всё на консоли в Studio.

1. Два простых числа называются "близнецами", если они отличаются друг от друга на 2 (например, 11 и 13, 17 и 19, 41 и 43). Определить все пары "близнецов" из заданного интервала натуральных чисел.

#include <iostream>
#include <windows.h>
#include <math.h>
using namespace std;
 
bool simple (int n) {
 if (n<2) return 0;
 if (n<4) return 1;
 for (int i=2; i<=floor(sqrt((float)n)); i++) if (n%i==0) return 0;
 return 1;
}
 
int main () {
 int a,b;
 cout << "Left interval = "; cin >> a;
 cout << "Right interval = "; cin >> b;
 for (int i=a; i<=b; i++) if (simple(i) && simple(i+2)) cout << i << " " << i+2 << endl;
 cout << endl;
 system("pause");
 return 0;
}

2. Сгенерировать последовательности 0 и 1, удовлетворяющих обоим требованиям:
1) никакие 3 единицы не стоят рядом;
2) число единиц превосходит число нулей.

#include <iostream>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
using namespace std;
 
int main(void) {
 const int m=200;
 int *a = new int [m];
 int n0=0,n1=0;
 srand((unsigned)time(NULL));
 for (int i=0; i<m; i++) {
  if (i>2 && a[i-2]==1 && a[i-1]==1) { a[i]=0; n0++; }
  else if (n0>=n1-1) { a[i]=1; n1++; }
  else {
   if (rand()%2) { a[i]=1; n1++; }
   else { a[i]=0; n0++; }
  }
  cout << a[i] << " ";
 }
 cout << "n(0)=" << n0 << " n(1)=" << n1 << endl;
 system("pause");
 return 0;
}

3. Дан целочисленный массив a0, a1,…, am-1. Из абсолютных величин его элементов выбрать наибольшую. Далее построить массив, i-й элемент которого равен нулю, если |ai| не совпадает с выбранным значением, и равен 1 в противном случае.

#include <iostream>
#include <math.h>
using namespace std;
 
int main(void) {
 const int m=10;
 int a[m] = { -1,22,-23,12,7,9,0,0,23,11 };
 int i;
 int max=abs(a[0]);
 for (i=1; i<m; i++) if (abs(a[i])>max) max=abs(a[i]);
 int b[m];
 cout << "a\tb" << endl;
 for (i=0; i<m; i++) {
  b[i] = (abs(a[i])==max ? 1 : 0);
  cout << a[i] << "\t" << b[i] << endl;
 }
 system("pause");
 return 0;
}

4. Даны действительные числа a0, …, am-1. Оставить без изменений последовательность, если она упорядочена по неубыванию или невозрастанию; в противоположном случае заменить нулями те элементы, порядковые номера которых кратны четырем.

#include <iostream>
#include <windows.h>
using namespace std;
 
int sign (int v) { //знак числа -1, 0 или 1
    return (v<0 ? -1 : (v==0 ? 0 : 1));
}
 
int main () {
    const int m=5;
    int a[m] = { 3, 2, 2, 2, 3 };
    int i;
    bool uporota = true;
    int sign1=0, sign2=0;
    for (i=1; i<m-1; i++) {
        if (sign(a[i]-a[i-1])) sign1 = sign(a[i]-a[i-1]);
        if (sign(a[i+1]-a[i])) sign2 = sign(a[i+1]-a[i]);
        if (sign1!=0 && sign2!=0 && sign1!=sign2) {
            uporota = false;
            break;
        }
    }
    if (uporota) cout << "It Is Sorted!";
    else {
        cout << "Cnanged: ";
        for (i=0; i<m; i++) {
            if (i>0 && i%4==0) //считаем, что 0 не кратен 4
                a[i] = 0;
            cout << a[i] << " ";
        }
    }
    cout << endl;
    system("pause");
    return 0;
}

5. Задано число А. Необходимо вывести число после исключения цифры в n-ой позиции числа.

#include <stdio.h>
#include <math.h>
 
int main () {
 long int n = 34752; //число
 int pos = 2; //номер извлекаемой цифры
 long int new_n = 0; //какое получится число
 int p = 0; 
 long int coeff=1;
 while (n) {
     int digit = n%10;
     if (p!=pos) {
      new_n += digit*coeff;
      coeff*=10;
     }
     n/=10;
     p++;
 }
 printf ("\nN=%ld",new_n);
 getchar ();
 return 0;
}

Цифры нумеруются справа налево начиная с 0, например:
34752 - число
43210 - номера цифр

Вот тут просто извлечение цифры из числа, и нумерация другая.

26.06.2015, 22:55 [9406 просмотров]


теги: c++ числа алгоритм

К этой статье пока нет комментариев, Ваш будет первым