Soru
Programcıya bir kelime/cümle (yazi) ve tekrar sayisi (adet) veriliyor. Sonrasında; mevcut yaziyi alarak, çift sırada yer alan karakterleri öne, tek sırada yer alan karakterleri arkaya biriktirerek birleştiren ve bunu da istenilen tekrar sayısı kadar yapan bir fonksiyon/işlev yazması isteniyor.
Örnek
Girdi | Çıktı |
---|---|
yazi: Denemedir adet: 1 |
Sonuç: Dnmdreeei |
yazi: Denemedir adet: 2 |
Sonuç: Dmreindee |
Çözüm - C#
using System;
using System.Collections.Generic;
using System.Text;
class Program
{
static void Main()
{
Console.WriteLine(YerleriDegistir("Denemedir", 2));
Console.Read();
}
public static string YerleriDegistir(string alinanYazi, long adet)
{
List<string> tekler = new List<string>();
List<string> ciftler = new List<string>();
StringBuilder yazi = new StringBuilder(alinanYazi);
int sayac = 0;
// Kaç defa tekrarlanacaksa o kadar döngü oluştur
while (sayac != adet)
{
// Yeni ve üzerine eklemeleri önlemek için diziyi temizle
tekler.Clear();
ciftler.Clear();
// İstenilen tek ve çift sıradaki karakterleri al ve ilgili diziye ekle
for (int i = 0; i < alinanYazi.Length; i += 2)
{
tekler.Add(yazi[i].ToString());
if (i + 1 != alinanYazi.Length)
{
ciftler.Add(yazi[i + 1].ToString());
}
}
// Mevcut yazıdaki birleştirmeyi temizle
yazi.Clear();
// Her iki dizideki harfleri birleştirip ilgili değişkene aktar
yazi.Append(string.Join("", tekler.ToArray()) + string.Join("", ciftler.ToArray()));
sayac++;
}
return yazi.ToString();
}
}
Çözüm - Java
import java.util.ArrayList;
public class Main {
public static void main(String[] args)
{
System.out.println((YerleriDegistir("Denemedir", 2)));
}
public static String YerleriDegistir(String alinanYazi, long adet)
{
ArrayList<String> tekler = new ArrayList<>();
ArrayList<String> ciftler = new ArrayList<>();
StringBuilder yazi = new StringBuilder(alinanYazi);
int sayac = 0;
// Kaç defa tekrarlanacaksa o kadar döngü oluştur
while (sayac != adet)
{
// Yeni ve üzerine eklemeleri önlemek için diziyi temizle
tekler.clear();
ciftler.clear();
// İstenilen tek ve çift sıradaki karakterleri al ve ilgili diziye ekle
for (int i = 0; i < alinanYazi.length(); i += 2)
{
tekler.add(String.valueOf(yazi.charAt(i)));
if (i + 1 != alinanYazi.length())
{
ciftler.add(String.valueOf(yazi.charAt(i+1)));
}
}
// Mevcut yazıdaki birleştirmeyi temizle
yazi.setLength(0);
// Her iki dizideki harfleri birleştirip ilgili değişkene aktar
yazi.append(String.join("", tekler) + String.join("", ciftler));
sayac++;
}
return yazi.toString();
}
}