Ну вот смотри. Первоначальный массив:
a[0]=0, a[1]=1,..., a[5]=5.
Далее просто смотрим, что получается при отработке цикла
i=0: 0 1 2 3 4 0 (a[5] = a[0] - пятому элементу в массиве присваиваем значение нулевого)
i=1 : 0 1 2 3 1 0 (a[4] = a[1])
i=2: 0 1 2 2 1 0 (a[3] = a[2])
i=3: 0 1 2 2 1 0 (a[2] = a[3])
i=4: 0 1 2 2 1 0 (a[1] = a[4])
i=5: 0 1 2 2 1 0 (a[0] = a[5])
Вообще после i=2 уже ничего не меняется, так как симметрия такого ряда относительно среднего элемента массива видна отчетливо. Но следует понимать, что в памяти все же происходит перезапись элемента (в C/C++ насколько я помню, произойдет копирование int'а и там не будет несколько ссылок не одно число, они как бы разные)
Function Check(k : Longint) : Boolean;
Var j : Byte;
Begin
Check:=True;
j:=k;
While j>0 do
Begin
If (j mod 10 = 0) or (k mod (j mod 10)<>0) then Check:=False;
j:=j div 10;
end;
end;
Var
n,i : Longint;
Begin
Readln(n);
For i:=1 to n do
If Check(i) then Writeln(i);
end.
? - фальшивая
+ - настоящая
dif - знание о весе фальшивой (больше или меньше)
vs - взвешивание
=> - итог взвешивания
1 откладываем
1) 7? vs 7?
if == => 14+ 7? goto 2)
if <> => 7+ 14? goto
2) 4? vs 4+
if == => 18+ 3? goto 3)
if <> => 10+ 4? goto
3) 2? vs 2+
if == => 20+ 1? goto 4)
if <> => 19+ 2? goto
4) 1? vs 1+
if == => фальшивая та что отложена вначале
if <> => нашли
Using namespace std;
int main ()
{
SetConsoleOutputCP(1251);
cout<<"Введите три числа"<<endl;
int a,b,c;
cin>>a>>b>>c;
if ( (a<0) && (b<0) && (c<0))
{
cout<<"неотрицательных чисел нет"<<endl;
system("pause");
return 0; // дальше не выполняем, чтобы не тратить силы впустую
}
if (a>0)
cout<<a*a<<endl;
if (b>0)
cout<<b*b<<endl;
if (c>0)
cout<<c*c<<endl;
system("pause");
return 0;
}
Эти задачи решаются легко наоборот:
т.е. мы от11 идем к числу 5 меняя знак в операции на противоположный
2 1 1.