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 [9534 просмотра]