Перевожу с C++ на C#. Выдает ошибку

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

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

Вам поручено изучить некоторые свойства семейства числовых последовательностей. Каждая из них задается следующей рекуррентной формулой: Xn+1 = F(Xn-1, Xn), где n > 1, а F(X,Y) вычисляется по следующему алгоритму: Вычисляется H = (A1*X*Y + A2*X + A3*Y + A4). Если H > B1, то из H вычитается число C до тех пор, пока не выполнится условие H ≤ B2. Получившееся число H является значением функции F. Неотрицательные целочисленные константы A1, A2, A3, A4, B1, B2 и C являются параметрами последовательности. Несложно понять, что так устроенная последовательность удовлетворяет соотношению Xp+n = Xp+q+n для подхо*дящих достаточно больших положительных целых p и q и для всех n ≥ 0. Ваша задача найти наименьшие числа p и q с таким свойством. Обратим внимание, что такие p и q определяются однозначно и не зависят от порядка, в котором производится минимизация. Исходные данные Первая строка содержит семь целых чисел: A1, A2, A3, A4, B1, B2 и C, во второй строке находятся два целых числа X1 и X2, первые два члена последовательности. Гарантируется, что при вычислении значения функции F проме*жу*точное значение H и результат вычисления функции F лежат в диапазоне [0..100000]. Результат Выведите два числа: p и q, для которых последовательность обладает вышеназванным свойством. Выдает ошибку в c# типа для не статического поля требуется ссылка на объект, но если сделать переменную типа string она исчезает, но мне надо чтобы переменная была int. Помогите код на с++ (рабочий, все верно)
#include <iostream>
#define max 300000
using namespace std;
 
int a1,a2,a3,a4,b1,b2,c,x1,x2;
int p,q;
 
int cal(int x, int y) {
    int h = a1*x*y+a2*x+a3*y+a4;
    if (h > b1) {
        while (h > b2) {
            h -= c;
        }
    }
    return h;
}
 
void iter(int& x, int& y) {
    int tmp = cal(x, y);
    x = y;
    y = tmp;
}
 
int main() {
    cin >> a1 >> a2 >> a3 >> a4 >> b1 >> b2 >> c >> x1 >> x2;
    int i, tmp1, tmp2, tmp3, tmp4;
    tmp3 = x1;
    tmp4 = x2;
    for (i = 0; i < max; i++) {
        iter(x1, x2);
    }
    tmp1 = x1;
    tmp2 = x2;
    q = 1;
    iter(x1, x2);
    while (x1 != tmp1 || x2 != tmp2) {
        q++;
        iter(x1, x2);
    }
    tmp1 = tmp3;
    tmp2 = tmp4;
    iter(tmp1,tmp2);
    i = 1;
    while (i != q) {
        i++;
        iter(tmp1, tmp2);
    }
    p = 1;
    while (tmp1 != tmp3 || tmp2 != tmp4) {
        p++;
        iter(tmp1, tmp2);
        iter(tmp3, tmp4);
    }
    cout << p << " " << q << endl;
}
код на с#, нужна помощь
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
 
namespace ConsoleApplication1
{
    class Program
    {
        const int max = 300000; 
 
        int a1, a2, a3, a4, b1, b2, c, x1, x2;
        int p, q;
        int cal(int x, int y)
        {
            int h = a1 * x * y + a2 * x + a3 * y + a4;
            if (h > b1)
            {
                while (h > b2)
                {
                    h -= c;
                }
            }
            return h;
        }
        void iter(int x, int y)
        {
            int tmp = cal(x, y);
            x = y;
            y = tmp;
        }
        
        static void Main(string[] args)
        {
            string a1, a2, a3, a4, b1, b2, c, x1, x2;
            a1 = Console.ReadLine();
           a2= Console.ReadLine();
            a3=Console.ReadLine();
            a4=Console.ReadLine();
            b1=Console.ReadLine();
            b2=Console.ReadLine();
            c=Console.ReadLine();
            x1=Console.ReadLine();
            x2=Console.ReadLine();
 
            int i, tmp1, tmp2, tmp3, tmp4;
            tmp3 = x1;
            tmp4 = x2;
            for (i = 0; i < max; i++)
            {
                iter(x1, x2);
            }
            tmp1 = x1;
            tmp2 = x2;
            q = 1;
            iter(x1, x2);
            while (x1 != tmp1 || x2 != tmp2)
            {
                q++;
                iter(x1, x2);
            }
            tmp1 = tmp3;
            tmp2 = tmp4;
            iter(tmp1, tmp2);
            i = 1;
            while (i != q)
            {
                i++;
                iter(tmp1, tmp2);
            }
            p = 1;
            while (tmp1 != tmp3 || tmp2 != tmp4)
            {
                p++;
                iter(tmp1, tmp2);
                iter(tmp3, tmp4);
            }
            Console.WriteLine(p);Console.WriteLine(q);
        }

    }
    }

Решение задачи: «Перевожу с C++ на C#. Выдает ошибку»

textual
Листинг программы
using System;
using System.Linq;
 
class Test
{
    const int max = 300000;
    static int[] coeff = new int[7];
 
    static int Cal(int x, int y)
    {
        int h = coeff[0] * x * y + coeff[1] * x + coeff[2] * y + coeff[3];
        if (h > coeff[4])
        {
            while (h > coeff[5])
            {
                h -= coeff[6];
            }
        }
        return h;
    }
 
    static void Iter(ref int x, ref int y)
    {
        int tmp = Cal(x, y);
        x = y;
        y = tmp;
    }
 
    static void Main(string[] args)
    {
        int p, q;
        coeff = Console.ReadLine().Split(' ').Select(n => Convert.ToInt32(n)).ToArray();
        int[] x = Console.ReadLine().Split(' ').Select(n => Convert.ToInt32(n)).ToArray();
 
        int i, tmp1, tmp2, tmp3, tmp4;
        tmp3 = x[0];
        tmp4 = x[1];
        for (i = 0; i < max; i++)
        {
            Iter(ref x[0], ref x[1]);
        }
        tmp1 = x[0];
        tmp2 = x[1];
        q = 1;
        Iter(ref x[0], ref x[1]);
        while (x[0] != tmp1 || x[1] != tmp2)
        {
            q++;
            Iter(ref x[0], ref x[1]);
        }
        tmp1 = tmp3;
        tmp2 = tmp4;
        Iter(ref tmp1, ref tmp2);
        i = 1;
        while (i != q)
        {
            i++;
            Iter(ref tmp1, ref tmp2);
        }
        p = 1;
        while (tmp1 != tmp3 || tmp2 != tmp4)
        {
            p++;
            Iter(ref tmp1, ref tmp2);
            Iter(ref tmp3, ref tmp4);
        }
        Console.WriteLine($"{p} {q}");
    }
}

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


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

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

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