Динамическое выделения памяти под массив - C#
Формулировка задачи:
Доброе утро.
Прошу помощи!
Была программа на С++, переделывал на С#, и столкнулся с такой проблемой.
В C++ использовалось динамическое выделение памяти:
Но какой аналог в С#?
Если поможет, код на C++ и C#
C++:
C#:
Нужно заменить строчку 23 и 24.
Если ставить галочку и заключать в блок, то возникает другая проблема, с переобразованием int[] в int.
Буду благодарен за помощь!
int *a = new int[N];
// 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;
}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();
}
}
}Решение задачи: «Динамическое выделения памяти под массив»
textual
Листинг программы
int[] arr = new int[n]; int[] arr1 = new int[n];