Algoritma Yarışması 3 - ihan3t

ihan3t

Kadim Üye
7 Şub 2012
5,018
22
Merhaba arkadaşlar, uzun zamandır yeni konu açamıyordum iş hayatı ve projelerden fırsat bulupta..

Biraz vaktim var ve şimdi size yeni bir algoritma sorusu soruyorum.

Bu sefer soru çok kısa olacak.

Soru şu şekilde:

"x ve y adında iki adet integer değişkeni, başka hiçbir değişken kullanmadan yer değiştirin."

Yani öyle bir işlem yapın ki, bu işlemin sonunda x ile y nin değerleri birbiri ile yer değişmiş olsun.

Soruyu çözmek için katılan, düşünmeyi ve gelişmeyi seven arkadaşlara başarılar..

Gene her sorunun altına koyduğum gibi önemli dipnot : başka hiçbir harici değişken kullanmayın, dosya yazma okuma işlemi (daha genel konuşacak olursak io işlemi) yapmayın, sadece bu iki değişkeni kullanın.

Cevabı açıklıyorum :

(kondanta isimli üyemiz beklediğim cevabı verdi, başka doğru yaklaşımlarda oldu)

Tebrikler.. Beklediğim cevap buydu.

Xor Swap diye de geçer.

Basitçe anlatmak gerekirse şöyle ki :

x = 001
y = 010

x = x XOR y

yani

001
010
=
011 // 3

y = x XOR y

yani

011
010
=
001 // 1

x = x XOR y

yani

011
001
=
010 // 2

x = 2
y = 1

olmuş oldu.

Xor işleminde, aynı bitler 0 farklı bitler 1 değerini alır.
Ve bilinmesi gereken bir diğer kural :

x XOR y = z ise
z XOR x = y
z XOR y = x

değerlerini verir.

Xor birçok şifreleme ve deşifreleme işlemlerinde de kullanılır.





 
Son düzenleme:

Phoique 7

Katılımcı Üye
14 Mar 2017
505
1
Manisa
Hocam ben böyle bişey yaptım anladığım kadarıyla,

Kod:
[COLOR="White"]x = 10
y = 20
print("x =",x)
print("y =",y)
x,y = y,x
print("\nx =",x)
print("y =",y)[/COLOR]
 

snorkinow

Yeni üye
4 Tem 2007
2
0
Konu madem algoritma x, y ve z değişkenleri oluşturup
x=1
y=2
z=x

x=y
y=z ile sorun çözülebilir Bir yöntem daha var ama çetrefilli :)
 

ihan3t

Kadim Üye
7 Şub 2012
5,018
22
Hocam ben böyle bişey yaptım anladığım kadarıyla,

Kod:
[COLOR="White"]x = 10
y = 20
print("x =",x)
print("y =",y)
x,y = y,x
print("\nx =",x)
print("y =",y)[/COLOR]

Bu soruyu python bölümüne açmak uygun olmadı sanırım.. Böyle bir şey geleceğini bekliyordum. Fakat algoritma sorusu olduğu için yapmazlar dedim :D

Algoritma ile bulunması gerekli dostum.


Konu madem algoritma x, y ve z değişkenleri oluşturup
x=1
y=2
z=x

x=y
y=z ile sorun çözülebilir Bir yöntem daha var ama çetrefilli :)

Böyle cevaplara yönelik, özellikle belirtiyorum harici bir değişken kullanmayın diye. Acaba sadece soruyu okuyup geçiyor musunuz?

Hayır öyle bile olsa, algoritma sorusu bu sonuçta. Çözümün böyle olması beklenemez değil mi.
 

VirtualSystem

Katılımcı Üye
19 Ağu 2017
411
0
Kod:
def yerdegis(x,y):
    x,y = y,x
    return y,x
print(yerdegis(0,1))

İlk çözüm olması dileğiyle diyelim :)
 

ALcatraz'

Kıdemli Üye
30 May 2013
4,338
4
İstanbul
Kod:
int a = 15, b = 13;
printf("%d %d\n", a , b); 
a = a - b; 
b = b + a; 
a = b - a; 
printf("%d %d", a, b); 
return 0;
 

Sagopa K

Kıdemli Üye
10 Haz 2016
3,678
42
Melankolia
Kod:
int b = 13, a = 15;
printf("%d %d\n", b , a); 
b = b - a; 
a = a + b; 
b = a - b; 
printf("%d %d", b, a); 
return 0;




:trl
 

ihan3t

Kadim Üye
7 Şub 2012
5,018
22
Kod:
    int x = 1;
    int y = 2;
    printf(..);
    x = x ^ y;
    y = x ^ y;
    x = x ^ y;
    printf(..);

Tebrikler.. Beklediğim cevap buydu.

Xor Swap diye de geçer.

Basitçe anlatmak gerekirse şöyle ki :

x = 001
y = 010

x = x XOR y

yani

001
010
=
011 // 3

y = x XOR y

yani

011
010
=
001 // 1

x = x XOR y

yani

011
001
=
010 // 2

x = 2
y = 1

olmuş oldu.

Xor işleminde, aynı bitler 0 farklı bitler 1 değerini alır.
Ve bilinmesi gereken bir diğer kural :

x XOR y = z ise
z XOR x = y
z XOR y = x

değerlerini verir.

Xor birçok şifreleme ve deşifreleme işlemlerinde de kullanılır.

 

Stretra

Katılımcı Üye
3 Haz 2017
285
0
Konstantin
int x = 1;
int y = 0;
staticl.****.Test1();
{{
x = x + y;
y = y + x;
console.write(x);
console.write(y);
}
Console.ReadKey();
}}

Kafadan salladım, katliam yaptıysam k.b :D
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.