using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ProblemThaiCreate { class Program { static void Main(string[] args) { Console.Write("Enter Your Text : "); //รับค่า string (จำนวนตัวอักษรเท่าทีตัวแปร string จะรับได้) string text = Console.ReadLine(); Console.Clear(); Console.WriteLine("Your Text : " + text+", Length : "+text.Length.ToString()); text = text.Replace(" ", ""); //เอาช่องว่างออกจาก string Console.WriteLine("Remove Space : " + text + ", Length : " + text.Length.ToString()); int length = text.Length; List<int> Denominator = new List<int>(); bool success = false; char[,] mText; int firstDigit = 0; int secondDigit = 0; while (!success) // ขั้นตอนในลูปนี้ คือ การวนหาตัวเลขที่ที่จำนวนใกล้เคียงกัน เพื่อคูณกันเป็นเมทตริกที่ใช่เก็บอักษร { for (int i = 1; i <= length; i++)// ลูปนี้หาตัวเลขที่สามารถหาร จำนวนอักษรได้ลงตัวว่ามีอะไรบ้าง { if ((length % i) == 0) { Denominator.Add(i); } } /* ต่อไปเป็นการเช็คเงื่อนไข โดยแบ่งเป็น 3 กรณี * 1. ตัวที่หารจำนวนตัวอักษรได้ลงตัวมีจำนวนเป็นคู่ : แสดงว่า มีตัวที่ใกล้เคียงกัน 2 ตัว สามารถคูณกันได้เป็นจำนวนตัวอักษร * 2. ตัวที่หารจำนวนตัวอักษรได้ลงตัวมีจำนวนเป็นคี่ : แสดงว่า มีตัวเลขตัวหนึ่งเมื่อคูณกับตัวมันเองจะได้เป็นจำนวนตัวอักษร (ได้เมทตริกจตุรัตร) * 3. จำนวนตัวอักษรเป็นจำนวนเฉพาะ จะต้องทำการ บวก จำนวนตัวอักษรไปอีก 1 แล้วทำการหาตัวหารที่ลงตัวใหม่อีกครั้ง */ if (Denominator.Count > 2) //จำนวนตัวอักษรไม่เป็นจำนวนเฉพาะ เพราะ มีตัวที่หารลงตัวมากกว่า 2 ตัว (ถ้าเป็นจำนวนเฉพาะจะมี 1 กับตัวมันเองเท่านั้น) { if ((Denominator.Count % 2) == 0) { firstDigit = Denominator[Denominator.Count / 2]; //ตัวเลขที่ใกล้เคียงกันที่สามารถคูณแล้วได้คำตอบจะอยู่ตรงกลางของ array secondDigit = Denominator[(Denominator.Count / 2) - 1]; Console.WriteLine("Dimansion : " + firstDigit.ToString() + " x " + secondDigit.ToString()); } else { firstDigit = Denominator[(Denominator.Count / 2)]; Console.WriteLine("Dimansion : " + firstDigit.ToString() + " x " + firstDigit.ToString()); } success = true; } else { length = length + 1; Denominator.Clear(); } } if (secondDigit == 0) { mText = new char[firstDigit, firstDigit];// ประกาศเมทตริกที่จะใช่เก็บตัวอักษร } else mText = new char[firstDigit, secondDigit]; int index = 0; char[] temp = text.ToCharArray(); for (int i = 0; i < mText.GetLength(0); i++) // นำตัวอักษรไปเก็บไว้ใน array 2 มิติ { for (int j = 0; j < mText.GetLength(1); j++) { mText[i, j] = temp[index]; index++; if (index >= temp.Length) index = 0; } } Console.WriteLine("----------------------------"); for (int i = 0; i < mText.GetLength(0); i++) // แสดงตัวษรที่เก็บไว้ใน array { for (int j = 0; j < mText.GetLength(1); j++) { Console.Write(mText[i,j]+ " "); } Console.WriteLine(); } Console.WriteLine("----------------------------"); string answer = ""; for (int i = 0; i < mText.GetLength(1); i++) // ทำการ transpose จะได้คำตอบ { for (int j = 0; j < mText.GetLength(0); j++) { answer += mText[j, i]; } answer += " "; } Console.WriteLine("Secret Code : "+answer); Console.ReadKey(); } } }
เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง