Динамическое выделения памяти под массив - C#

Узнай цену своей работы

Формулировка задачи:

Доброе утро. Прошу помощи! Была программа на С++, переделывал на С#, и столкнулся с такой проблемой. В C++ использовалось динамическое выделение памяти:
int *a = new int[N];
Но какой аналог в С#? Если поможет, код на C++ и C# C++:
// ConsoleApplication13.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <ctime>
using namespace std;
 
void f(int n)
{
    int count = 0;
    if (n<1)
    {
        cout<<n<<endl;
        return;
    }
    int* arr = new int[n];
    int* arr1 = new int[n];
    bool tf;
    int n1;
    int q;
    for (int i=0;i<n;i++)
        arr[i]= 1;
    while (n>1)
    {
        n1 = n;
        for (int i = 0;i < n-1; i++)
        {
            arr1[i]= arr[i];
            cout<<arr1[i]<<'+';
        }
        arr1[n-1]= arr[n-1];
        count++;
        cout<<arr1[n-1]<<endl;
        tf = true;
        while (tf)
        {
            if (n1 < 3)
                break;
            tf = false;
            for (int i = n1-3; i > -1; i--)
            {
                if (arr1[i] >= arr1[i+1]+1)
                {
                    tf = true;
                    arr1[i+1]++;
                    if (arr1[n1-1] - 1 < 1)
                        n1--;
                    else
                        arr1[n1-1]--;
                    for (int j = i + 2; j < n1; j++)
                    {
                        if ((arr1[j] - 1) > 0)
                        {
                            arr1[j]--;
                            n1++;
                            j--;
                        }
                    }
                        //-out-
                    for (int j=0;j<n1-1;j++)
                    {
                        cout<<arr1[j]<<'+';
                    }
                    cout<<arr1[n1-1]<<endl;
                    count++;
                    i++;
                    for (int j = i; j < n1 - 2; j++)
                    {
                        if (arr1[j] >= arr1[j+1]+1)
                        {
                            tf = true;
                            arr1[j+1]++;
                            if (arr1[n1-1] - 1 < 1)
                                n1--;
                            else
                                arr1[n1-1]--;
                            //-out-
                            for (int j=0;j<n1-1;j++)
                            {
                                cout<<arr1[j]<<'+';
                            }
                            cout<<arr1[n1-1]<<endl;
                            count++;
                        }
                        else 
                            break;
                        j++;
                    }
                    break;
                }
            }
            if (!tf)
                break;
        }
        n--;
        arr[0]++;
    }
    cout<<"all options: "<<count<<endl;
}
//------------
 
int _tmain(int argc, _TCHAR* argv[])
{
    int n;
    cout<<"input your number: ";
    cin>>n;
    f(n);
    system("pause");
    return 0;
}
C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication1
{

    class Program
    {
        static void f(int n)
        {
            int count = 0;
            if (n < 1)
            {
                Console.WriteLine(n);
                return;
            }
            unsafe
            {
                int *arr = new int[n];
                int *arr1 = new int[n];
            }
            bool tf;
            int n1;
            for (int i = 0; i < n; i++)
                arr[i] = 1;
            while (n > 1)
            {
                n1 = n;
                for (int i = 0; i < n - 1; i++)
                {
                    arr1[i] = arr[i];
                    Console.Write(arr1[i] + '+');
                }
                arr1[n - 1] = arr[n - 1];
                count++;
                Console.WriteLine(arr1[n - 1]);
                tf = true;
                while (tf)
                {
                    if (n1 < 3)
                        break;
                    tf = false;
                    for (int i = n1 - 3; i > -1; i--)
                    {
                        if (arr1[i] >= arr1[i + 1] + 1)
                        {
                            tf = true;
                            arr1[i + 1]++;
                            if (arr1[n1 - 1] - 1 < 1)
                                n1--;
                            else
                                arr1[n1 - 1]--;
                            for (int j = i + 2; j < n1; j++)
                            {
                                if ((arr1[j] - 1) > 0)
                                {
                                    arr1[j]--;
                                    n1++;
                                    j--;
                                }
                            }
                            //-out-
                            for (int j = 0; j < n1 - 1; j++)
                            {
                                Console.Write(arr1[j] + '+');
                            }
                            Console.WriteLine(arr1[n1 - 1]);
                            count++;
                            i++;
                            for (int j = i; j < n1 - 2; j++)
                            {
                                if (arr1[j] >= arr1[j + 1] + 1)
                                {
                                    tf = true;
                                    arr1[j + 1]++;
                                    if (arr1[n1 - 1] - 1 < 1)
                                        n1--;
                                    else
                                        arr1[n1 - 1]--;
                                    //-out-
                                    for (j = 0; j < n1 - 1; j++)
                                    {
                                        Console.Write(arr1[j] + '+');
                                    }
                                    Console.WriteLine(arr1[n1 - 1]);
                                    count++;
                                }
                                else
                                    break;
                                j++;
                            }
                            break;
                        }
                    }
                    if (!tf)
                        break;
                }
                n--;
                arr[0]++;
            }
            Console.WriteLine("all options: " + count);
        }
        //------------
        static void Main(string[] args)
        {
            Console.WriteLine("input your number: ");
    int n = Console.Read();
    f(n);
    Console.ReadLine();
        }
    }
}
Нужно заменить строчку 23 и 24. Если ставить галочку и заключать в блок, то возникает другая проблема, с переобразованием int[] в int. Буду благодарен за помощь!

Решение задачи: «Динамическое выделения памяти под массив»

textual
Листинг программы
int[] arr = new int[n];
int[] arr1 = new int[n];

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.867 из 5
Похожие ответы