Задать вопрос
AlexSetup
@AlexSetup
Python

Как переписать данный кусок кода, написанного на Python, на C++?

Есть код функции на Python:
def Precalculate(n, k):
    d = 0
    a = [[1] * n]
    totalSum = 1
    maxValue = k
    while d < 9 * n and totalSum <= maxValue:
        d = d + 1
        ad = [0] * n
        last = s[n - 1]
        tmp = 0
        if (last - d >= 0):
            tmp = tmp + 1
        if (last + d <= 9):
            tmp = tmp + 1
        print(tmp)
        ad[n - 1] = tmp
        a.append(ad)
        for j in range(n - 2, -1, -1):
            sum = 0
            for m in range(0, 10):
                tmp = d - abs(s[j] - m)
                if tmp >= 0:
                    sum = sum + a[tmp][j + 1]
            ad[j] = sum
        totalSum = totalSum + ad[0]
    return a

Переписал ее на C++, но она работает некорректно:
vector<vector<int>> Precalculate(int n, int  k, vector<int> &s) {
	int d = 0;
	vector<vector<int>> a(1, vector<int>(n));
	for (int q = 0; q < n; q++) {
		a[0][q]=1;
	}
	int totalSum;
	totalSum = 1;
	int maxValue = k;
	int last;
	vector <int> ad(n);
	while (d < 9 * n && totalSum <= maxValue) {
		d++;
	    last = s[n - 1];
		int tmp = 0;
		if (last - d >= 0) {
			tmp++;
		}
		if (last + d <= 9) {
			tmp++;
		}
		cout << tmp << endl;
		ad[n - 1] = tmp;
		a.push_back(ad);
		for (int j = n - 2; j > -1; j--) {
			int sum = 0;
			for (int m = 0; m < 10; m++) {
				tmp = d - abs(s[j] - m);
				if (tmp >= 0) {
					sum += a[tmp][j + 1];
				}
			}
			ad[j] = sum;
		}
		totalSum += ad[0];
	}
	return a;
}

Выводят две функции при одинаковых входных данных разные результаты.
В чем ошибка и как ее исправить?

Заранее спасибо!
  • Вопрос задан
  • 281 просмотр
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
Adamos
@Adamos
vector<vector<int>> Precalculate(int n, int  k, vector<int> &s) {
  int d = 0;
  vector<vector<int>> a(n, vector<int> (1, 1));
  int totalSum = 1;
  int maxValue = k;
  while (d < 9 * n && totalSum <= maxValue) {
    d++;
    vector <int> ad(n, 0);
    int last = s[n - 1];
    int tmp = 0;
    if (last - d >= 0) {
      tmp++;
    }
    if (last + d <= 9) {
      tmp++;
    }
    cout << tmp << endl;
    ad[n - 1] = tmp;
    a.push_back(ad);
    for (int j = n - 2; j > -1; j--) {
      int sum = 0;
      for (int m = 0; m < 10; m++) {
        tmp = d - abs(s[j] - m);
        if (tmp >= 0) {
          sum += a[tmp][j + 1];
        }
      }
      ad[j] = sum;
    }
    totalSum += ad[0];
  }
  return a;
}

Главная ошибка - место создания ad: в питоне внутри цикла, а в сях почему-то снаружи.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 дек. 2024, в 20:40
10000 руб./за проект
22 дек. 2024, в 20:34
3000 руб./за проект
22 дек. 2024, в 20:12
10000 руб./за проект