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