Aishwarya Prakash Verma Ответов: 2

Преобразование Python в C/C++


def readinput():
  n = int(input())     # Length
  for j in range(n):   
    nextnum = int(input())  # Read each value
    insequence.append(nextnum)
    best.append(0)     # Initialize best[k] for each position
  return

def solve():
  for j in range(len(insequence)):
    # Collect best[k] for values to left of j that divide insequence[j]
    prev = [ best[k] for k in range(j) if insequence[j]%insequence[k] == 0 ]
    if prev:
       best[j] = 1 + max(prev)
    else:
       best[j] = 1

insequence = []
best = []
readinput()
solve()
print(max(best))


Что я уже пробовал:

Я не знаю, с чего начать. пожалуйста помочь

Patrice T

Как насчет изучения Python, чтобы понять этот код, а затем C, чтобы написать перевод?

2 Ответов

Рейтинг:
20

CPallini

C++ довольно выразителен:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

vector<int> readinput()
{
  size_t n;
  cin >> n; 
  vector<int> v(n);
  for (auto & x : v)
    cin >> x;
  return v;
}
vector <int> solve(const vector<int> & inseq)
{
  auto size = inseq.size();
  vector<int> best(size);
  for (size_t j=0; j<size; ++j)
  {
    vector<int> prev;
    for (size_t k=0; k<j; ++k)
      if ( inseq[j] % inseq[k] == 0)
        prev.push_back(best[k]);
    best[j] = prev.size() > 0 ? 1 + *max_element(prev.begin(), prev.end()) : 1;
  }
  return best;
}

int main()
{
  auto inseq = readinput();
  auto best = solve(inseq);
  cout << *max_element(best.begin(), best.end()) << endl;
}


Рейтинг:
1

Richard MacCutchan

Забудь это. Python слишком отличается от C, чтобы сделать любое преобразование простым. Многие функции Python не имеют прямого эквивалента в языке C, поэтому вам придется создавать свои собственные альтернативы. Просто используйте детали дизайна программы, чтобы написать ее на языке C.


CPallini

Может быть, трудно реализовать с помощью C С другой стороны, C++...

Richard MacCutchan

Тебе легко говорить об этом ...