ماتریس حلزونی
سلام دوستای خوبم، داشتم برنامه نویسی تمرین می کردم یه سوال خیلیی عالی پیدا کردم گفتم تو انجمن هم بذارم شاید برا شما هم جالب باشه.
این برنامه یک ورودی n
دریافت کرده و ماتریسی n×n ساخته و به ترتیب، n^2 عدد، برای مقدار دادن به هرکدام از خانههای آرایه میگیرد. یک حلزون از خانه (۰,۰) شروع کرده و به صورت حلزونی ماتریس را دور میزند تا به درونیترین نقطه ماتریس برسد. حلزون در این راه هر خانه که جلو میرود، عددها را جمع میکند. هرگاه این مجموع، مربع کامل بود، برای او حکم یک امتیاز دارد. که ما در خروجی برنامه، مجموع این امتیازها را میخواهیم.
نکته: n فقط می تواند از ۱ تا ۵ باشد. و همه ی مقادیر خانه های آرایه کمتر از ۱۰۰ هستند.
ورودی
1 2 3 4 5 6 |
n=5 ۱ ۳ ۵ ۷ ۹ ۱۱ ۱۳ ۱۵ ۱۷ ۱۹ ۲۱ ۲۳ ۲۵ ۲۷ ۲۹ ۳۱ ۳۳ ۳۵ ۳۷ ۳۹ ۴۱ ۴۳ ۴۵ ۴۷ ۴۹ |
1 |
۷ |
پاسخ ها ( ۳ )
سوال خیلی خوبی بود، واقعا ممنون، کلی لذت بردم از حل کردنش!!
int n = Convert.ToInt32(Console.ReadLine());
if (n >= 1 && n <= 5)
{
int c1 = 0, c2 = n – 1, k = 1, emtiyaz = 0;
int[,] spiralMatrix = new int[n, n];
bool flag = true;
for (int i = 0; i < n; i++)
{
for (int j = 0; j = 100)
{
Console.WriteLine(“error:maghadir araye az 100 kamtar bashad”);
flag = false;
break;
}
}
if (!(flag))
{
break;
}
}
if (flag)
{
if (spiralMatrix[0, 0] == 1)
{
emtiyaz++;
}
while (k <= n * n)
{
for (int i = c1; i <= c2; i++)
{
if (i != 0)
{
spiralMatrix[c1, i] += spiralMatrix[c1, (i – 1)];
if (!(Math.Sqrt(spiralMatrix[c1, i]).ToString().Contains('/')))
{
emtiyaz++;
}
}
k++;
}
for (int j = c1 + 1; j = c1; i–)
{
spiralMatrix[c2, i] += spiralMatrix[c2, (i + 1)];
if (!(Math.Sqrt(spiralMatrix[c2, i]).ToString().Contains(‘/’)))
{
emtiyaz++;
}
k++;
}
for (int j = c2 – 1; j >= c1 + 1; j–)
{
spiralMatrix[j, c1] += spiralMatrix[(j + 1), c1];
if (!(Math.Sqrt(spiralMatrix[j, c1]).ToString().Contains(‘/’)))
{
emtiyaz++;
}
k++;
}
c1++;
c2–;
if (k > n * n)
{
break;
}
}
Console.WriteLine(“sum emtiyaz is:”+emtiyaz);
}
}
else
{
Console.WriteLine(“error!!”);
}