Я считаю, что в начальный момент времени каретка находится под любой ячейкой с меткой. Предлагаю такой алгоритм: представим, что по обе стороны от массива есть по пузырьку, и они начинают двигаться навстречу друг другу. Встретятся они в средней ячейке.
Вот вроде так, попробуйте
Вопросы должны, как мне кажется, задаваться следующим образом:
1) N = 1.
2) В какой половине алфавита находится N-я буква?
3) В какой половине из этой части находится N-я буква?
... и т.д. пока не дойдём до самой буквы, т.е. потребуется 5 вопросов на каждую букву (2^5 = 32).
Таким образом, всего – 5*5 = 25 вопросов.
Var d:array[1..10] of integer;
s,i:integer;
Begin
s:=1;
For i:=1 to 10 do
begin
readln(d[i]);
If d[i]<>0
Then S:=S*d[i];
end;
Writeln(S);
end.
#include <iostream>
using namespace std;
/*
* Сумма элементов массива
* [ 1, 2, 3] => 6
* [-5, 8, 2] => 5
*/
int arraySum(int a[], int s)
{
int ret = 0;
for (int i = 0; i < s; i++) {
ret += a[i];
}
return ret;
}
/*
* Определение, каких чисел больше в массиве.
* [-1, 2, 3] => "Положительных"
* [ 1, -2, -3] => "Отрицательных"
*/
const char* plusMinGreater(int a[], int s)
{
int plus = 0, minus = 0;
for (int i = 0; i < s; i++) {
if (a[i] > 0) plus++;
if (a[i] < 0) minus++;
}
return (plus > minus ?
"Положительных чисел больше" :
(plus < minus ?
"Отрицательных чисел больше" :
"Положителных и отрицательных поровну"));
}
/*
* Разница между максимальным и минимальным элементами.
* [5, 3, 2] => 5 - 2 = 3
*/
int maxMinDiff(int a[], int s)
{
int min = a[0], max = a[0];
for (int i = 1; i < s; i++) {
if (a[i] > max) max = a[i];
if (a[i] < min) min = a[i];
}
return max - min;
}
int main()
{
int n;
cout << "n = ";
cin >> n;
int a[n];
for (int i = 0; i < n; i++) {
cout << "Число " << i << ": ";
cin >> a[i];
}
cout << plusMinGreater(a, n) << endl
<< "Сумма: " << arraySum(a, n) << endl
<< "Разница максимального и минимального элементов: "
<< maxMinDiff(a, n) << endl;
return 0;
}