Ir ao conteúdo

Posts recomendados

Postado

Bom dia, estou com um código em C++ que retorna quais valores somados em um vetor retornam um certo numero, e gostaria de transforma-lo em C (Professor quer somente em C), alguém poderia ajudar?

 

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<vector<int> > v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << "[ ";
      for(int j = 0; j <v[i].size(); j++){
         cout << v[i][j] << " ";
      }
      cout << "]";
   }
   cout << "]"<<endl;
}
class Solution {
  public:
   vector < vector <int> > res;
void solve(int idx, vector <int> &a, int b, vector <int> temp){
      if(b == 0){
         res.push_back(temp);
         return;
      }
      if(idx == a.size())return;
      if(b < 0)return;
      sort(a.begin(), a.end());
      for(int i = idx; i < a.size(); i++){
         if(i > idx && a[i] == a[i-1])continue;
         temp.push_back(a[i]);
         solve(i + 1, a, b - a[i], temp);
         temp.pop_back();
      }
   }
   vector<vector<int> > combinationSum2(vector<int> &a, int b) {
      res.clear();
      vector <int> temp;
      solve(0, a, b, temp);
      return res;
   }
};
int main(){
   Solution ob;
   vector<int> v = {90,54,89,30,5};
   print_vector(ob.combinationSum2(v, 149)) ;
}

 

Agradeço!

  • Amei 1
Postado

@ZecaUrubu     converter de uma linguagem para outra voce substitui os comandos , de uma pelo da outra ,  por exemplo , no lugar do  cout  <<  ,  coloque printf , e os outros  tambem ,  porém nem sempre darah certo pois alguns comandos da  Linguagem C++ sao bem complicados ,  e em C  teria que criar funcoes para fazer a mesma coisa ,  e entao seria melhor mesmo fazer tudo desde o inicio usando a linguagem que se quer , e como voce vai fazer em C ,  entao veja e poste o enunciado da questão ,   para que possamos te ajudar  .   ,,,  .

Postado
  Em 30/10/2021 às 21:13, devair1010 disse:

@ZecaUrubu     converter de uma linguagem para outra voce substitui os comandos , de uma pelo da outra ,  por exemplo , no lugar do  cout  <<  ,  coloque printf , e os outros  tambem ,  porém nem sempre darah certo pois alguns comandos da  Linguagem C++ sao bem complicados ,  e em C  teria que criar funcoes para fazer a mesma coisa ,  e entao seria melhor mesmo fazer tudo desde o inicio usando a linguagem que se quer , e como voce vai fazer em C ,  entao veja e poste o enunciado da questão ,   para que possamos te ajudar  .   ,,,  .

Expandir  

Olá, eu fiz em c++, pois existem esses comandos em c++ que facilitam e em C está complicado.

A questão é a seguinte:

 

  • Obrigado 1
Postado

@ZecaUrubu Esse é praticamente um programa C. A única classe sequer tem construtores, não há herança, polimorfismo, nada. Só duas funções.

 

  Em 30/10/2021 às 22:03, ZecaUrubu disse:

eu fiz em c++, pois existem esses comandos em c++ que facilitam

Expandir  

 

Sim, C++ por exemplo calcula permutações diretamente. só que você não usou.

 

troque o vetor por um array, troque as referências por ponteiros. Troque as funções de streams e terá o programa C. 

  • Curtir 1
Postado
class Solution {
  public:
   vector < vector <int> > res;
void solve(int idx, vector <int> &a, int b, vector <int> temp){
      if(b == 0){
         res.push_back(temp);
         return;
      }
      if(idx == a.size())return;
      if(b < 0)return;
      sort(a.begin(), a.end());
      for(int i = idx; i < a.size(); i++){
         if(i > idx && a[i] == a[i-1])continue;
         temp.push_back(a[i]);
         solve(i + 1, a, b - a[i], temp);
         temp.pop_back();
      }
   }
   vector<vector<int> > combinationSum2(vector<int> &a, int b) {
      res.clear();
      vector <int> temp;
      solve(0, a, b, temp);
      return res;
   }
};

 

Não sei se entendi essa classe Solution

 

Tem um método recursivo, a tal função solve() que usa dois vetores e chama sort., Para um vetor temp por valor e o outro por referência, não tem sequer um construtor padrão, e em combinationSum2() --- um nome estranho já que não tem combinationSum1() --- aloca um vetor temp e passa para solve como argumento, por valor. 

 

E esse clear() porque existe se só usa uma vez?

 

int main(){
   Solution ob;
   vector<int> v = {90,54,89,30,5};
   print_vector(ob.combinationSum2(v, 149)) ;
}

 

Porque não preencher v no construtor de Solution simplesmente, e redefinir << para Solution?  Podia ser algo simples como
 

int main(void)
{
   Solution ob({90,54,89,30,5});
   cout << ob;
}

 

Se fosse para usar as supostas facilidades de C++. Ou mesmo
 

int main(void)
{
    cout << ob({90,54,89,30,5});
    return 0;
}

 

 

 

  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Mostrar mais  

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

Mostrar mais  
×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!