Последовательность Фибоначчи с использованием массивов и циклов For - PullRequest
0 голосов
/ 12 июля 2020

Эта программа предназначена для создания волновой структуры с использованием C# с последовательностью и массивами Фибоначи. Номер последовательности находится в конце, а звездочки соответствуют номеру текущей строки впереди. Все это делается с использованием циклов For и верхнего ограничителя, выполняемого массивом, я решаю эту проблему ограничителя, используя аспект .Length массивов, но я не понимаю, как правильно использовать массив внутри эта последовательность.

В этой первой части кода у меня есть последовательность, построенная с использованием моего массива с индексом 12, поскольку мне нужны только 11 первых последовательностей Фибоначчи. Проблема, с которой я столкнулся, находится во второй части кода.

 class Program
    {
        static void Main(string[] args)
        {
            int a = 0, b = 1;

            int[] fibArray = new int[12];
            fibArray[0] = 0;
            fibArray[1] = 1;

            Console.WriteLine("0");
            Console.WriteLine("*1");

            for (int i = 3; i <= fibArray.Length; i++)
            {

                
                fibArray[i] = a + b;
                a = b;
                b = fibArray[i];
                             

                for(int y = 1; y <= fibArray[i]; y++)
                {
                    Console.Write("*");
                }

                
                Console.Write("" + fibArray[i]);
                Console.WriteLine();
            }

С этой второй частью кода я не могу заставить его регистрироваться и выводить последовательность. В основном я не уверен, как правильно настроить свой массив, чтобы последовательность Фибоначчи могла также go перевернуться. Я понимаю, что последовательность обычно f (n) = f (n-1) + f (n-2), я не могу понять, как правильно использовать массивы в этом контексте.


            for (int p = fibArray[11]; p >= fibArray.Length; p--)
            {

                for (int k = 1; k <= p; k++)
                {
                    Console.Write("*");  
                }
                Console.Write(""+ b);
                Console.WriteLine();                                           
            }
        }
    }
}


Извините для разглагольствования, просто пытаюсь объяснить код в целом, но чтобы дать сумму того, о чем я спрашиваю. Это будет то, как использовать массивы, что я сделал не так с моим текущим кодом и какой аспект я мог бы использовать для управления циклами с помощью самого массива.

Чтобы дать общий пример желаемого результата, он будет будь таким:

0
*1
*1
**2
***3
***3
**2
*1
*1
0

1 Ответ

0 голосов
/ 12 июля 2020

Несколько замечаний относительно вашего исходного кода. Вы вручную установили первые два значения в последовательности в элементах 0 и 1, но затем пропустили элемент 2 и начали с элемента 3. Ваш l oop включал длину массива в качестве допустимого индекса, когда он должен начинаться с (array length - 1), поскольку массивы равны нулю на основе. Net.

Вы можете вывести правильную длину звездочек с помощью этого строкового конструктора .

Я бы отделить генерацию последовательности от вывода:

static void Main(string[] args)
{
    // building the Fibonacci sequence (no output at this time)
    int[] fibArray = new int[12];
    for (int i = 0; i < fibArray.Length; i++)
    {
        switch (i)
        {
            case 0:
                fibArray[i] = 0;
                break;

            case 1:
                fibArray[i] = 1;
                break;

            default:
                fibArray[i] = fibArray[i - 1] + fibArray[i - 2];
                break;
        }
        
    }

    // increasing curve
    for (int i = 0; i < fibArray.Length; i++)
    {
        Console.WriteLine(new String('*', fibArray[i]) + fibArray[i].ToString());
    }
    // decreasing curve
    for (int i = (fibArray.Length-1); i >= 0; i--)
    {
        Console.WriteLine(new String('*', fibArray[i]) + fibArray[i].ToString());
    }

    Console.WriteLine();
    Console.Write("Press Enter to Quit");
    Console.ReadLine();
}

Вывод:

0
*1
*1
**2
***3
*****5
********8
*************13
*********************21
**********************************34
*******************************************************55
*****************************************************************************************89
*****************************************************************************************89
*******************************************************55
**********************************34
*********************21
*************13
********8
*****5
***3
**2
*1
*1
0

Press Enter to Quit
...