|
|
|
ช่วยด้วยครับ กับการสลับตำแหน่งแบบ simple Transpose ครับ |
|
|
|
|
|
|
|
Information And Coding Theory หรือครับ เข้ารหัสลับอะไรประมาณนั้นหรือเปล่า
เราถนัด C# นะครับ ซึ่งใช่ visual 2008 เป็น Console application ลองเอาไปประยุกต์ดูนะ
Code (C#)
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();
}
}
}
|
|
|
|
|
Date :
2012-09-05 14:10:10 |
By :
chamachu |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ไม่เคยเรียน C# เลย รบกวนขอความช่วยเหลือเป็น c++ ได้ไหมค่ะ ไม่เข้าใจเลย T^T
|
|
|
|
|
Date :
2013-09-18 16:32:07 |
By :
patra |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 02
|