Перевожу с 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}");
}
}