В задаче имеется "топорное решение" — посчитать напрямую. Получившееся число будет восьмизначным, что не так уж и страшно, если в голову не приходят другие решения.
Рассмотрим, однако, решение, которое позволит делать подобные задачи без прямого подсчёта. Для этого, прежде всего, переведём всё в степени тройки:
Как представляется число 3n в троичной системе счисления? Давайте подумаем, как мы переводим из десятичной системы в троичную? Сначала делим на 3, затем частное делим на 3, затем новое частное на 3 и т.п. Что получится в случае деления 3n на 3? Очевидно, что 3n-1. А если его поделить дальше на 3, то получится 3n-2. Если так сделать n раз, то в конце останется 30, то есть. Таким образом, это будет число 100..00, где количество нулей равно n.
То есть, например, 8-ая степени тройки в троичной системе представима в виде 1000000003. А 35 — это 1000003.
Вернёмся теперь к нашей сумме. Давайте сначала в столбик сложим 316 и 35 в троичной системе счисления.
Теперь остаётся из этого вычесть 32. Для этого придётся "занять" разряд. Но принцип тут такой же, как и в обычной, десятичной системе счисления, только 0 будут превращаться не в 9, а в 2 (самую большую цифру в троичной системе счисления:
Язык c++ Первая задача и вторая в одном проекте. #include <iostream> #include <cstdlib>// включает srand() и rand() #include <ctime> // содержит time int main(){ float mas[79]; double mult = 1; srand(time(NULL));// при каждом запуске будут новые случайные числа for (int i=0; i<79; i++) mas[i] = 0.1*rand();//заполнение массива случайными числами // Задача 2: произведение этих элементов: for (int i=0; i<79; i++) mult*=mas[i]; std::cout << "mult = " << mult << std::endl; system("pause"); return 0; } Третья: #include <iostream> #define x 3 //определяем максимальный размер массива, сейчас 3 using namespace std; int main(){ float N[x]; int i; for (i=0; i<x; i++){ cout << "N[" << i << "]= "; cin >> N[i]; } cout << "" << endl; for (i=0; i<x; i++) cout << "N[" << i << "] / 2= " << N[i]/2 << endl; system("pause"); } Четвертая: #include <iostream> #define N 3 //определяем максимальный размер массива, сейчас 3 using namespace std; int main(){ int mas[N], i, j; for (i=0; i<N; i++){ cout << "mas[" << i << "]= "; cin >> mas[i]; } cout << "" << endl; for (i=0, j=0; i<N; i++) if (mas[i] < -3) j++; cout << "summa mas[i] < -3 = " << j << endl; system("pause"); } Пятая: #include <iostream> #include <cstdlib>// включает srand() и rand()#include <ctime> // содержит time #define N 5 int main(){ int mas[N], sum=0; srand(time(NULL));// при каждом запуске будут новые случайные числа for (int i=0; i<N; i++){ mas[i] = rand();//заполнение массива случайными числами if (i%2) sum+=mas[i]; } std::cout<<"sum= " << sum << std::endl; system("pause"); }
Рассмотрим, однако, решение, которое позволит делать подобные задачи без прямого подсчёта. Для этого, прежде всего, переведём всё в степени тройки:
98328316+35+35+35−9−32−32==
9
8
+
3
5
−9 =
3
2
8
+
3
5
−
3
2
=
3
16
+
3
5
−
3
2
Как представляется число 3n в троичной системе счисления? Давайте подумаем, как мы переводим из десятичной системы в троичную? Сначала делим на 3, затем частное делим на 3, затем новое частное на 3 и т.п. Что получится в случае деления 3n на 3? Очевидно, что 3n-1. А если его поделить дальше на 3, то получится 3n-2. Если так сделать n раз, то в конце останется 30, то есть. Таким образом, это будет число 100..00, где количество нулей равно n.
То есть, например, 8-ая степени тройки в троичной системе представима в виде 1000000003. А 35 — это 1000003.
Вернёмся теперь к нашей сумме. Давайте сначала в столбик сложим 316 и 35 в троичной системе счисления.
100…000000016100000100…0⏟10100000 1
00
…
0000000
⏞
16
100000 1
00
…
0
⏟
10
100000
Теперь остаётся из этого вычесть 32. Для этого придётся "занять" разряд. Но принцип тут такой же, как и в обычной, десятичной системе счисления, только 0 будут превращаться не в 9, а в 2 (самую большую цифру в троичной системе счисления:
100…0⏞10100000−100100…0⏟10022200 1
00
…
0
⏞
10
100000 −100 1
00
…
0
⏟
10
022200
Таким образом, количество двоек в указанной сумме получилось равным 3.
ответ: 3 двойки в троичной записи.
Первая задача и вторая в одном проекте.
#include <iostream>
#include <cstdlib>// включает srand() и rand()
#include <ctime> // содержит time
int main(){
float mas[79];
double mult = 1;
srand(time(NULL));// при каждом запуске будут новые случайные числа
for (int i=0; i<79; i++) mas[i] = 0.1*rand();//заполнение массива случайными числами
// Задача 2: произведение этих элементов:
for (int i=0; i<79; i++) mult*=mas[i];
std::cout << "mult = " << mult << std::endl;
system("pause");
return 0;
}
Третья:
#include <iostream>
#define x 3 //определяем максимальный размер массива, сейчас 3
using namespace std;
int main(){ float N[x];
int i;
for (i=0; i<x; i++){ cout << "N[" << i << "]= ";
cin >> N[i];
}
cout << "" << endl;
for (i=0; i<x; i++)
cout << "N[" << i << "] / 2= " << N[i]/2 << endl;
system("pause");
}
Четвертая:
#include <iostream>
#define N 3 //определяем максимальный размер массива, сейчас 3
using namespace std;
int main(){
int mas[N], i, j;
for (i=0; i<N; i++){
cout << "mas[" << i << "]= ";
cin >> mas[i];
}
cout << "" << endl;
for (i=0, j=0; i<N; i++)
if (mas[i] < -3) j++;
cout << "summa mas[i] < -3 = " << j << endl;
system("pause");
}
Пятая:
#include <iostream>
#include <cstdlib>// включает srand() и rand()#include <ctime> // содержит time
#define N 5
int main(){
int mas[N], sum=0;
srand(time(NULL));// при каждом запуске будут новые случайные числа for (int i=0; i<N; i++){
mas[i] = rand();//заполнение массива случайными числами
if (i%2) sum+=mas[i];
}
std::cout<<"sum= " << sum << std::endl;
system("pause");
}