#include
#include
#include
typedef std::vector IntArray;
void Swap(int &x, int &y)
{
// Write code here (1)
}
void MinMax(const IntArray& arr, int& min, int& max)
{
min = std::numeric_limits::max();
max = std::numeric_limits::min();
for (IntArray::const_iterator itr=arr.begin();itr!=arr.end();itr++)
{
int cur = *itr;
// Write code here (2)
}
}
void Swap(int &x, int &y){
x = x + y;
y = x - y;
x = x - y;
}
void MinMax(const IntArray& arr, int& min, int& max)
{
min = std::numeric_limits::max();
max = std::numeric_limits::min();
for (IntArray::const_iterator itr=arr.begin();itr!=arr.end();itr++)
{
int cur = *itr;
min = ( cur <min):cur,min> max = ( cur >max):max,cur );
}
}
أما في 03 آذار 2009 08:00 م، فقد تنهد الشمري بارتياح وهو يرد:
فلا أعرف حل دون استخدام ( : ) , أو قد يكون حل يتعلّق بالبت من عنوان الموضوع :-) int cur = *itr;
min = ( cur <min):cur,min> max = ( cur >max):max,cur );
min = (cur < min) ? cur : min;
#define swap(a,b) ( (a ^= b ) ,( b^=a ),(a ^= b ) );
وفي 07/ربيع الأول/1430 06:14 م، أعرب سعيد بسيوني عن رأيه بالموقف كالآتي:
أعتقد انك بتقصد العبارة دي:في 07/ربيع الأول/1430 06:09 م، قال عبد اللطيف حاجي علي بهدوء وتؤدة:
يجب أن أذكر هنا أن استخدام تعلميات assembly ليس وارداً طبعاًوفي 03 آذار 2009 09:43 م، ظهر شبح ابتسامة على وجه انس وهو يقول:
لدي اقتراح فيما يخص swap#define swap(a,b) ( (a ^= b ) ,( b^=a ),(a ^= b ) );
swap(x,x)
إن هذه العملية ستقوم بتصفير متغير x وضياع قيمته بدل الحفاظ عليها (نفس المشكلة في طريقة الجمع والطرح). طبعاً هذا لا يحدث في الطريقة التقليدية 😄 .template void Swap(T x, T y) {
T t = x;
x = y;
y = t;
}
int minMax( int * tab, int size)
{
int i;
int max = tab[0];
int min = tab[0];
for (i=1; i<size;> {
max ^= ( (max - tab[i]) >> 31 ) & ( tab[i] ^ max);
min ^= ( (tab[i] - min) >> 31 ) & ( tab[i] ^ min);
}
printf("max = %d\nmin = %d", max, min);
return 0;
}
int MinMax(int x, int y, int& min, int &max);
unsigned int x, y;
unsigned int negative = (x-y) >> 31;
min = negative*x + !negative*y;
max = !negative*x + negative*y;
min = (mask&x) | (~mask&y);
mask & x = x;
~mask = 0;
~mask & y = 0 & y= 0;
x | 0 = x; // وهو الرقم الأصغر
max = (~mask&x) | (mask&y);
int x,y;
unsigned int mask = (x-y) >> 31;
int MinMax(int x, int y, int& min, int &max)
{
unsigned int mask = (x-y) >> 31;
min = (mask&x) | (~mask&y);
max = (~mask&x) | (mask&y);
}
max ^= ( (max - tab[i]) >> 31 ) & ( tab[i] ^ max);
int mask = (max - tab[i]) >> 31;
max ^= mask & (tab[i] ^ max);
result ^= mask & (y^x);
// (p ^= q) <=> (result = p ^ q)
result = x ^ (mask & (y^x));
// (p ^ q) <=> (~p&q) | (p&~q)
result = (~x & (mask & (y^x))) | (x & (~mask | ~(y^x)));
// ~(q ^ p) <=> (q ^ ~p)
result = (~x & mask & (y^x)) | (x & (~mask | (y^~x)));
// (p ^ q) <=> (~p&q) | (p&~q) مرتان
result = (~x & mask & ((~y&x) | (y&~x))) | (x & (~mask | ((~y&~x) | (y&x))));
// توزيع & على |
result = ((~x&mask&~y&x) | (~x&mask&y&~x)) | (x & (~mask | (~y&~x) | (y&x))));
// ~p&p <=> 0
// p&p <=> p
// 0 | p <=> p
result = (mask&~x&y) | ((x&~mask) | (x&~y&~x) | (x&y&x));
// ~p&p <=> 0
// p&p <=> p
// 0 | p <=> p
result = (mask&~x&y) | (x&~mask) | (x&y);
// توزيع الـ | على الـ &
result = (mask&~x&y) | (((x&~mask)|x) & ((x&~mask)|y));
// (p & q) | p <=> p
result = (mask&~x&y) | (x & ((x&~mask)|y));
// توزيع الـ | على الـ &
result = (mask&~x&y) | (x & (x|y) & (~mask|y));
// p & (p|q) <=> p
result = (mask&~x&y) | (x & (y|~mask));
// توزيع & على |
result = (mask&~x&y) | (x&y) | (x&~mask);
// إخراج y من القوسين
result = (y & ((mask&~x) | x)) | (x&~mask);
// (p&~q) | q <=> p|q
result = (y & (x|mask)) | (x&~mask);
// توزيع & على |
result = (y&x) | (y&mask) | (x&~mask);
// q & 1 <=> q
// 1 <=> (p|~p)
result = ((y&x) & (mask|~mask)) | (y&mask) | (x&~mask);
// توزيع & على |
result = (y&x&mask) | (y&x&~mask) | (y&mask) | (x&~mask);
// إعادة ترتيب
result = (y&x&mask) | (y&mask) | (y&x&~mask) | (x&~mask);
// (p&q) | p <=> p
result = (y&mask) | (x&~mask)