güzel bir for döngüsü sorusu?

Bu konuyu okuyanlar

trdtrd

Öğrenci
Katılım
27 Ağustos 2016
Mesajlar
3
Reaksiyon puanı
0
Puanları
1
Yaş
39
soru şöyle; kullanıcı bir sayı giriyor bu sayı bizim kişi sayımız oluyor yani elinde balon olan kişi sayısı birinci kişiden başlıyor kaç kişi girdiyse kullanıcı o sayıya kadar. kişiler ve ellerinde balonlar iğne ilk kişinin elinde o yanındaki kişinin balonunu patlatıyor yani ikinci kişinin ikinci kişinin balonu patladı ikinci kişi elinde olan iğneyi dördüncü kişiye veriyor o da beşinci kişinin balonunu patlatıyor o şekilde devam ediyor elinde balon olan bir kişi kalana kadar. o kalan kişinin kaçıncı kişi olduğunu ekrana yazdırmamız gerekiyor.

int n=Convert.ToInt32(Console.ReadLine());
List<int>insanlar=new List<int>();
for(int i=1;i<=n;i++)
insanlar.Add(i);

if(n%2==0){
for(int i=1;i<insanlar.Count;i++)
insanlar.RemoveAt(i);}
else{
for(int i=1;i<insanlar.Count;i++)
insanlar.RemoveAt(i);}
// for(int i=1;i<insanlar.Count;i++)
// insanlar.RemoveAt(i);
// for(int i=1;i<insanlar.Count;i++)
// insanlar.RemoveAt(i);
foreach (var insan in insanlar)
Console.WriteLine(insan);


bu şekilde yazdım ama hep bir değerinin veriyor

mesela beş kişi olsa üçüncü kişi kalıyor en son.

bunu en az forla nasıl yapabilirim?
 

trdtrd

Öğrenci
Katılım
27 Ağustos 2016
Mesajlar
3
Reaksiyon puanı
0
Puanları
1
Yaş
39
düzeltme
soru şöyle; kullanıcı bir sayı giriyor bu sayı bizim kişi sayımız oluyor yani elinde balon olan kişi sayısı birinci kişiden başlıyor kaç kişi girdiyse kullanıcı o sayıya kadar. kişiler ve ellerinde balonlar iğne ilk kişinin elinde o yanındaki kişinin balonunu patlatıyor yani ikinci kişinin ikinci kişinin balonu patladı iğne birinci kişideydi o elinde olan iğneyi üçüncü kişiye veriyor o da dördüncü kişinin balonunu patlatıyor o şekilde devam ediyor elinde balon olan bir kişi kalana kadar. o kalan kişinin kaçıncı kişi olduğunu ekrana yazdırmamız gerekiyor.

int n=Convert.ToInt32(Console.ReadLine());
List<int>insanlar=new List<int>();
for(int i=1;i<=n;i++)
insanlar.Add(i);
if(n%2==0){
for(int i=1;i<insanlar.Count;i++)
insanlar.RemoveAt(i);}
else{
for(int i=1;i<insanlar.Count;i++)
insanlar.RemoveAt(i);}
// for(int i=1;i<insanlar.Count;i++)
// insanlar.RemoveAt(i);
// for(int i=1;i<insanlar.Count;i++)
// insanlar.RemoveAt(i);
foreach (var insan in insanlar)
Console.WriteLine(insan);


bu şekilde yazdım ama hep bir değerinin veriyor

mesela beş kişi olsa üçüncü kişi kalıyor en son.

bunu en az forla nasıl yapabilirim?
 

eSa

Müdavim
Cezalı
Katılım
5 Kasım 2011
Mesajlar
9,782
Reaksiyon puanı
352
Puanları
83
Girilen kişi sayısı çift ise sonuç=kişi-1 , tek ise sonuç=kişi sayısı olur.
 

trdtrd

Öğrenci
Katılım
27 Ağustos 2016
Mesajlar
3
Reaksiyon puanı
0
Puanları
1
Yaş
39
kişi sayısı şeklinde değil bütün balonlar patlatıldıkdan sonra elinde en son balon kişinin kaçıncı kişi olduğunu ekrana yazdırmam gerekiyor.
şöyle ki kullanıcı 5 girdi diyelim
1 2 3 4 5 aray listimiz ilk başta bu oluyor burada 1. kişiden başlıyor (yani ilk olarak iğne 1.kişide) 1.kişi 2. kişinin balonunu patlatıyor ve iğneyi 3.kişiye veriyor 3.kişide 4. kişinin balonunu patlatıyor yani ilk turda 2. ve 4. kişilerin balonları patlıyor onları for ile remoat ile çıkarıyorum (2. ve 4.kişiyi) iğne artık 5.kişide ilk fordan sonra artık array listte 1 3 5 kişiler kalıyor sonra iğne 5.kişide olduğu için 1.kişinin balonunu patlatıyor ve iğneyi 3.kişiye veriyor oda 5.kişinin balonunu patlatıyor sonuçta 3.kişi kalıyor. 5 kişi için sonuç=3 bu şekilde yazdırmam lazım
 

algea

Doçent
Katılım
15 Temmuz 2011
Mesajlar
505
Reaksiyon puanı
22
Puanları
18
List ile bunu başaramazsın. Static bir veri tipi denemelisin…
 

algea

Doçent
Katılım
15 Temmuz 2011
Mesajlar
505
Reaksiyon puanı
22
Puanları
18
List dynamic bir veri tipidir. her removeat method’unu çağırışta sıralama otomatik değişecektir. Aşağıdaki örnek biraz yardımcı olabilir.

Kod:
Module Module1

    Sub Main()
        Dim a As New List(Of String)
        Dim s As String() = {}
        a.Add("1")
        a.Add("2")
        a.Add("3")
        a.Add("4")
        a.Add("5")

        s = a.ToArray

        For i As Integer = 0 To s.Length - 1
            If i Mod 2 = 0 Then
                s(i) = ""
            End If
        Next

        a.Clear()
        For i As Integer = 0 To s.Length - 1
            If s(i) <> "" Then
                a.Add(s(i))
            End If
        Next

        For Each item As String In a
            Console.WriteLine(item)
        Next
        Console.ReadKey()
    End Sub

End Module
 
Üst