none
Üçgen Sorusu RRS feed

  • Soru

  • Herkese Merhabalar :) sağdan soldan alttan 5 harfin toplamı 25 edecek

    Soldan : A+G+B+H+C = 25

    Sağdan A+G+F+İ+E = 25

    Alttan C+H+D+İ+E = 25

    Üçgenlere 1-9 arasında sayılar yerleştirilecek hepsi 1 defa kullanılmak şartıyla (Örneğin A = 1 E=1 olamaz )

    Ben kodlarını yaptım doğruluğuna %90 eminim ama bilgisayar 1 saattir sonucu veremiyor .

    Yardım ve önerilerinizi beklerim.

    Kodlarm :

    int a, b, c, d, h, g, f, i, e;
                while (true)
                {
                    Random abgch = new Random();
                    a = abgch.Next(1, 9);
                    b = abgch.Next(1, 9);
                    g = abgch.Next(1, 9);
                    c = abgch.Next(1, 9);
                    h = abgch.Next(1, 9);
                    d = abgch.Next(1, 9);
                    f = abgch.Next(1, 9);
                    i = abgch.Next(1, 9);
                    e = abgch.Next(1, 9);
    
                    int abgch1 = 0;
                    int agfie1 = 0;
                    int chdie1= 0;
                  
                    if (a != b && a != g && a != c && a != h && a != d && a != f && a != i && a != e)
                    {
                        if (b != g && b != c && b != h && b != d && b != f && b != i && b != e)
                        {
                            if (g != c && g != h && g != d && g != f && g != i && g != e)
                            {
                                if (c != h && c != d && c != f && c != i && c != e)
                                {
                                    if (h != d && h != f && h != i && h != e)
                                    {
                                        if (d != f && d != i && d != e)
                                        {
                                            if (f != i && f != e)
                                            {
                                                if (i != e)
                                                {
                                                    abgch1 = a + b + g + c + h;
                                                    agfie1 = a + g + f + i + e;
                                                    chdie1 = c + h + d + i + e;
                                                    if (abgch1 == 25 && agfie1 == 25 && chdie1 == 25)
                                                    {
                                                        Console.WriteLine("ABGCH icin :A=" + a + "B=" + b + "G=" + g + "C=" + c + "H=" + h + " SONUC=" + abgch1);
                                                        Console.WriteLine("AGFIE icin :A=" + a + "G=" + g + "F=" + f + "I=" + i + "E=" + e + "SONUC=" + agfie1);
                                                        Console.WriteLine("CHDIE icin :C=" + c + "H=" + h + "D=" + d + "I=" + i + "E=" + e + " SONUC=" + chdie1);
                                                        break;
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
         
                    }
    
                }
                Console.ReadKey();


    Agha Huseynov

    28 Ekim 2015 Çarşamba 01:44

Yanıtlar

  • O biraz basit oldu şu hemen buluyor sonucu

    for (int a = 1; a < 10; a++)
    {
    	for (int b = 1; b < 10; b++)
    	{
    		if (b == a) continue;
    		for (int c = 1; c < 10; c++)
    		{
    			if (c == b) continue;
    			if (c == a) continue;
    			for (int d = 1; d < 10; d++)
    			{
    				if (d == c) continue;
    				if (d == b) continue;
    				if (d == a) continue;
    				for (int e = 1; e < 10; e++)
    				{
    					if (e == d) continue;
    					if (e == c) continue;
    					if (e == b) continue;
    					if (e == a) continue;
    					for (int f = 1; f < 10; f++)
    					{
    						if (f == e) continue;
    						if (f == d) continue;
    						if (f == c) continue;
    						if (f == b) continue;
    						if (f == a) continue;
    						for (int g = 1; g < 10; g++)
    						{
    							if (g == f) continue;
    							if (g == e) continue;
    							if (g == d) continue;
    							if (g == c) continue;
    							if (g == b) continue;
    							if (g == a) continue;
    							for (int h = 1; h < 10; h++)
    							{
    								if (h == g) continue;
    								if (h == f) continue;
    								if (h == e) continue;
    								if (h == d) continue;
    								if (h == c) continue;
    								if (h == b) continue;
    								if (h == a) continue;
    								if (a + g + b + h + c != 25) continue;
    								for (int i = 1; i < 10; i++)
    								{
    									if (i == h) continue;
    									if (i == g) continue;
    									if (i == f) continue;
    									if (i == e) continue;
    									if (i == d) continue;
    									if (i == c) continue;
    									if (i == b) continue;
    									if (i == a) continue;
    
    									if (a + g + f + i + e == 25 && c + h + d + i + e == 25)
    									{
    										richTextBox.Text += "a: " + a + "\tb: " + b + "\tc: " + c + "\td: " + d + "\te: " + e + "\tf: " + f + "\tg: " + g + "\th: " + h + "\ti: " + i + "\n";
    									}
    								}
    							}
    						}
    					}
    				}
    			}
    		}
    	}
    }

    • Yanıt Olarak İşaretleyen Agha HUSEYNOV 28 Ekim 2015 Çarşamba 13:45
    28 Ekim 2015 Çarşamba 13:31

Tüm Yanıtlar

  • Şu şekilde harfleri sıranın ifade ettiğini düşünürsek

    a b c d e f g h i
    0 1 2 3 4 5 6 7 8
    
    a g b h c => 0 6 1 7 2
    a g f i e => 0 6 5 8 4
    c h d i e => 2 7 3 8 4


    readonly int[] sayilar = new  int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    List<List<int>> denemeler = new List<List<int>>();
    List<List<int>> sonuclar = new List<List<int>>();
    List<int> deneme;
    Random rnd = new Random();
    BackgroundWorker bw = new BackgroundWorker();
    
    
    private void buttonDene_Click(object sender, EventArgs e)
    {
    	bw.RunWorkerAsync();
    }
    
    private void Form1_Load(object sender, EventArgs e)
    {
    	bw.WorkerSupportsCancellation = true;
    	bw.DoWork += delegate
    	{
    		while (!bw.CancellationPending)
    		{
    			deneme = new List<int>(sayilar.OrderBy(a=> Guid.NewGuid()));
    			bool sonuc = true;
    			if (deneme[0] + deneme[6] + deneme[1] + deneme[6] + deneme[2] != 25)
    				sonuc = false;
    			if (deneme[0] + deneme[6] + deneme[5] + deneme[8] + deneme[4] != 25)
    				sonuc = false;
    			if (deneme[2] + deneme[7] + deneme[3] + deneme[8] + deneme[4] != 25)
    				sonuc = false;
    			if (sonuc)
    				if (!sonuclar.Contains(deneme))
    				{
    					sonuclar.Add(deneme);
    					richTextBox.AppendText(string.Join(" ", deneme) + "\n");
    				}
    
    			
    				
    			denemeler.Add(deneme);
    
    		}
    	};
    }
    
    private void button1_Click(object sender, EventArgs e)
    {
    	bw.RunWorkerAsync();
    }
    
    private void buttonStop_Click(object sender, EventArgs e)
    {
    	bw.CancelAsync();
    }

    28 Ekim 2015 Çarşamba 07:24
  • hata aldim hocam  

    Dene ve tikla (ayni kod) buttonuna basinca : Additional information: Cross-thread operation not valid: Control 'richTextBox1' accessed from a thread other than the thread it was created on.


    Agha Huseynov

    28 Ekim 2015 Çarşamba 11:29
  • Sorun cozuldu rich texbox yerine message box yaptim


    Agha Huseynov

    28 Ekim 2015 Çarşamba 11:31
  • onun bir sürü sonucu oluyor message box ile nasıl yaptınız ?
    28 Ekim 2015 Çarşamba 11:33
  • MessageBox.Show("Yol :"+saycag.ToString()+"  ====   "+ string.Join(" ", deneme) + "\n"); 


    Agha Huseynov

    28 Ekim 2015 Çarşamba 12:35
  • Durduramazsınız uygulamayı hiç bir zaman, butonu boşa koymuş oluyoruz
    28 Ekim 2015 Çarşamba 12:41
  • hocam başka türlü nasıl yapa biliriz ? Üniversitede hoca yaptı birtanesini fakat kodlarını paylaşmadı sadece exe var. 

    İndiriniz


    Agha Huseynov


    28 Ekim 2015 Çarşamba 12:47
  • Bende çalışan kod sizde niye çalışmadı ben anlamadım. 

    Debug yapmayın direk derleyip çalıştırın.

    28 Ekim 2015 Çarşamba 13:04
  • Bu uygulama random yapmıyor permütasyon yapıyor.  Neden random dediniz ben anlamadım zaten. Bilmediğiniz bir şeyi bilmediğiniz bir şekilde bilmediğiniz bir yöntemle bilmediğiniz birisine yanlış yaptırdınız.

    28 Ekim 2015 Çarşamba 13:06
  • hocam hep bir eziyorsunuz :) soru bu şekilde daha ayrıntılı bilseydim yazardım ve çözümünüde yapa bilseydim buraya sormazdım.

    Agha Huseynov

    28 Ekim 2015 Çarşamba 13:11
  • soruyu yazsaydınız Random istediniz ben random yazdım

    Form loada


    for (int a = 1; a < 10; a++)
    	for (int b = 1; b < 10; b++)
    		for (int c = 1; c < 10; c++)
    			for (int d = 1; d < 10; d++)
    				for (int e = 1; e < 10; e++)
    					for (int f = 1; f < 10; f++)
    						for (int g = 1; g < 10; g++)
    							for (int h = 1; h < 10; h++)
    								for (int i = 1; i < 10; i++)
    									if (a + g + b + h + c == 25 & a + g + f + i + e == 25 && c + h + d + i + e == 25)
    										richTextBox.Text += "a: " + a + " b: " + b + " c: " + c + " d: " + d + " e: " + e + " f: " + f + " g: " + g + " h: " + h + " i: " + i + "\n";


    28 Ekim 2015 Çarşamba 13:20
  • O biraz basit oldu şu hemen buluyor sonucu

    for (int a = 1; a < 10; a++)
    {
    	for (int b = 1; b < 10; b++)
    	{
    		if (b == a) continue;
    		for (int c = 1; c < 10; c++)
    		{
    			if (c == b) continue;
    			if (c == a) continue;
    			for (int d = 1; d < 10; d++)
    			{
    				if (d == c) continue;
    				if (d == b) continue;
    				if (d == a) continue;
    				for (int e = 1; e < 10; e++)
    				{
    					if (e == d) continue;
    					if (e == c) continue;
    					if (e == b) continue;
    					if (e == a) continue;
    					for (int f = 1; f < 10; f++)
    					{
    						if (f == e) continue;
    						if (f == d) continue;
    						if (f == c) continue;
    						if (f == b) continue;
    						if (f == a) continue;
    						for (int g = 1; g < 10; g++)
    						{
    							if (g == f) continue;
    							if (g == e) continue;
    							if (g == d) continue;
    							if (g == c) continue;
    							if (g == b) continue;
    							if (g == a) continue;
    							for (int h = 1; h < 10; h++)
    							{
    								if (h == g) continue;
    								if (h == f) continue;
    								if (h == e) continue;
    								if (h == d) continue;
    								if (h == c) continue;
    								if (h == b) continue;
    								if (h == a) continue;
    								if (a + g + b + h + c != 25) continue;
    								for (int i = 1; i < 10; i++)
    								{
    									if (i == h) continue;
    									if (i == g) continue;
    									if (i == f) continue;
    									if (i == e) continue;
    									if (i == d) continue;
    									if (i == c) continue;
    									if (i == b) continue;
    									if (i == a) continue;
    
    									if (a + g + f + i + e == 25 && c + h + d + i + e == 25)
    									{
    										richTextBox.Text += "a: " + a + "\tb: " + b + "\tc: " + c + "\td: " + d + "\te: " + e + "\tf: " + f + "\tg: " + g + "\th: " + h + "\ti: " + i + "\n";
    									}
    								}
    							}
    						}
    					}
    				}
    			}
    		}
    	}
    }

    • Yanıt Olarak İşaretleyen Agha HUSEYNOV 28 Ekim 2015 Çarşamba 13:45
    28 Ekim 2015 Çarşamba 13:31
  • Tesekkürler 

    Agha Huseynov

    28 Ekim 2015 Çarşamba 13:45