n = -n

  • Креатор на темата Креатор на темата back_rest
  • Време на започнување Време на започнување

back_rest

ex mod coder
Член од
19 јули 2006
Мислења
1.590
Поени од реакции
107
Денес нагазив на еднo нубско прашање на нет, како во Java на некој број да му сменел знакот. Од + во - и од - во +. Решенијата беа од креативни, покреативни.

Затоа овде отварам сесија, проблемот е следниот: имаш број, промени му го знакот, и врати го резултатот. Дозволено е се, освен очигледното.

Посебно ми се бендиса недетерминистичкото решение:
Код:
int i;
while (true)
{
i = Math.random() * MAX_INT;
if (i + n==0)
return i;
}

Или објектниот модел.

Код:
NumberOperationsFactory factory = AbstractOperationsFactory.newNumberOperationsFactory();
IntegerOperations operations = factory.newIntegerOperations();
return n - operations.multiply(new Integer(n), new Integer(2)).intValue();
 
Денес нагазив на еднo нубско прашање на нет, како во Java на некој број да му сменел знакот. Од + во - и од - во +. Решенијата беа од креативни, покреативни.

Затоа овде отварам сесија, проблемот е следниот: имаш број, промени му го знакот, и врати го резултатот. Дозволено е се, освен очигледното.

Посебно ми се бендиса недетерминистичкото решение:
Код:
int i;
while (true)
{
i = Math.random() * MAX_INT;
if (i + n==0)
return i;
}

Или објектниот модел.

Код:
NumberOperationsFactory factory = AbstractOperationsFactory.newNumberOperationsFactory();
IntegerOperations operations = factory.newIntegerOperations();
return n - operations.multiply(new Integer(n), new Integer(2)).intValue();

that's why programers need to go to math lessons :star:
 
Не ја сваќам финтата, дозволено е се освен очигледното? Оваа треба во ЧДА да иде?:pos2:

Иначе...

n=n-2*n
return n;
:pos2:
 
Не ја сваќам финтата, дозволено е се освен очигледното? Оваа треба во ЧДА да иде?:pos2:

Иначе...

n=n-2*n
return n;
:pos2:

Тоа е муабетот, напрај го што е можно покомплицирано, без очиглените нели: return n* -1 и return n - 2*n;

Иначе да, таман ЧДА стил е ова.
 
Може и вака...

Код:
int smeniZnak(int n)
{
int br = 0;
if(n>0)
{
for(int i=0; i<n; i++)
{
br--;
}
else
{
for(int i=0; i<n; i++)
{
br++;
}
}
return br;
}

Може и да се потсреди малце и не сум го тестирал, ама мислам дека ќе дава точен резултат :toe:
 
Имам две. Прво нешто слично како кај SkyDriver
Код:
int sprotivenBroj(int n)
{
   int a = 0;
   if (n==0)
      return 0;
   else if (n>0)
   {
      while (n) {a++; n--;}
      while (a--) {n--;}
   }
   else
   {
      while (n) {a++; n++;}
      while (a--) {n++;}
   }
return n;
}

Еве го и другото
Код:
int sprotivenBroj(int n)
{
	char asd[20];
	sprintf(asd, " %d", n);
	if (asd[1] == '-')
		asd[1] = ' ';
	else
		asd[0] = '-';

	sscanf(asd, "%d", &n);
	return n;
}
 
Код:
#include <iostream>
using namespace std;
main()
{
int i;
cout<<"Vnesi broj:";
cin>>i;
cout<<"-i:"<<~(i)+1<<endl;
system("pause");
}
Мислам дека можи и вака.
п.с ама во ц++ нз за јава како е
И за враќање повторно назад
Код:
#include <iostream>
using namespace std;
int izmeni(int i)
{
return ~(i)+1;
}
main()
{
int i;
cout<<"Vnesi broj:";
cin>>i;
i=izmeni(i);
cout<<"-i:"<<izmeni(i)<<endl;
system("pause");
}
 
Денес нагазив на еднo нубско прашање на нет, како во Java на некој број да му сменел знакот. Од + во - и од - во +. Решенијата беа од креативни, покреативни.

Затоа овде отварам сесија, проблемот е следниот: имаш број, промени му го знакот, и врати го резултатот. Дозволено е се, освен очигледното.

Посебно ми се бендиса недетерминистичкото решение:
Код:
int i;
while (true)
{
i = Math.random() * MAX_INT;
if (i + n==0)
return i;
}

Или објектниот модел.

Код:
NumberOperationsFactory factory = AbstractOperationsFactory.newNumberOperationsFactory();
IntegerOperations operations = factory.newIntegerOperations();
return n - operations.multiply(new Integer(n), new Integer(2)).intValue();

Првото решение и мене ме бендиса, иновативно. Extraordinary.
Ме интересира веројатноста да го погоди бројот :) ?
 
Сешто..... ај па ако ви е досадно смислувајте што е можно покомплициран начин за пресметување на факторијали.
 
Сешто..... ај па ако ви е досадно смислувајте што е можно покомплициран начин за пресметување на факторијали.

Воопшто не е за „сешто“. Редовен проблем е судирање со нов јазик, технологија или платформа кај која работите кои ти стојат базични во старата, овде едноставно ги нема. Импровизирањето и вртењето одстрана е ите како неопходно.

Е сега нема баш до овој проблем да дојдеш, ама пример еве во Prolog или LISP имплементирај фор или некој друг итеративен циклус. Па ќе видиш зошто некој прави рекурзија која имитира работа не итеративен фор циклус. Тоа ти е :)
 
Воопшто не е за „сешто“. Редовен проблем е судирање со нов јазик, технологија или платформа кај која работите кои ти стојат базични во старата, овде едноставно ги нема. Импровизирањето и вртењето одстрана е ите како неопходно.

Е сега нема баш до овој проблем да дојдеш, ама пример еве во Prolog или LISP имплементирај фор или некој друг итеративен циклус. Па ќе видиш зошто некој прави рекурзија која имитира работа не итеративен фор циклус. Тоа ти е :)

Come again ?
Нели рекурзија = итерација ?
 
Come again ?
Нели рекурзија = итерација ?

Не си го разбрал мислењето. HsIlOmEdUs вели дека програмерот треба да биде креативен и да знае да импровизира и кажа зошто.

Ете кажа пример, во Prolog нема итерација. Таа се имлементира со рекурзија.

Во другите јазици, во Ц пример се избегнува рекурзија затоа што е понеефикасна од итерација, но ете во Prolog и за некое едноставно повторување ќе мора да се користи да се користи „неефикасната“ рекурзија. (незнам пролог, но според википедија пролог има некои оптимизции за рекурзија)

Значи рекурзија != итерација
 
Рекурзијата е "неефикасна" во C затоа што C има stack кој има одредена големина и не можеш да одиш подлабоко од тоа. На пример на PHP стакот по default дозволува највеќе 100 нивоа во длабочина да одиш.
Функционалните јазици како LISP немаат такво ограничување.

Моето тврдење дека рекурзија = итерација се однесува на тоа дека и со двете "техники" можеш истата работа да ја направиш, само што за некои случаи рекурзијата е подобра, на пример шетање по дрва.

А во право си, не го разбрав добро коментарот, ама сега кога го разбирам, мислам дека смислување на што покомплициран начин на смениш знак на променлива е тотално бесцелно и никого ништо нема да научи. Нешто како Perl Golf http://en.wikipedia.org/wiki/Perl_Golf_Apocalypse
 
Значи едноставна работа како на пример имаш интегер со вредност 50,да се напрај со спротивна вредност,да го искомплицираме колку шо можиме?
Ако е така,не можи,ако бројот е позитивен да речиме 50, да се одземи 50 од 0,а ако е негативен,да речиме - 50,да се додај 50 на нулата ?Или и то е многу едноставно :toe:

Код:
int br,result;
if(br>0)
result = 0 - br;
else
result = 0 + br;
 
Значи едноставна работа како на пример имаш интегер со вредност 50,да се напрај со спротивна вредност,да го искомплицираме колку шо можиме?
Ако е така,не можи,ако бројот е позитивен да речиме 50, да се одземи 50 од 0,а ако е негативен,да речиме - 50,да се додај 50 на нулата ?Или и то е многу едноставно :toe:

Код:
int br,result;
if(br>0)
result = 0 - br;
else
result = 0 + br;

Имаш грешка.
ако бр > 0 пример br = 5 тогаш
result = 0 - 5 = -5

ако бр < 0 пример br = -5 тогаш
result = 0 + (-5) = 0 - 5 = -5 //грешка, го добивме истото

треба result = 0 + abs(br);
 

Kajgana Shop

Back
На врв Bottom