Перевожу с 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}"); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д