2016-03-10 2 views
-1
#include <iostream> 
#include <set> 
#include <algorithm> 
using namespace std; 

int cost[10][10]; 
string team[10]; 
int perm[10]; 

int main() { 

    int R; 
    cin >> R; 
    for (int j=0; j<R; j++) { 
     cin >> team[j]; 
     perm[j] = j; 
    } 

    for (int a=0; a < R; a++) 
     for (int b=0; b < a; b++) { 
      string combined = team[a]+team[b]; 
      int overlap = combined.size() - set<char>(combined.begin(), combined.end()).size(); 
      cost[a][b] = cost[b][a] = overlap; 
     } 

    int best = 27*R; 
    do { 
     int count=0; 
     for (int j=0; j < R-1; j++) 
      count += cost[perm[j]][perm[j+1]]; 
     best = min(best,count); 
    } while (next_permutation(perm,perm+R)); 

    cout << best << endl; 
} 

выше код на C++, и я не знаю, как перевести эту часть кода: int overlap = combined.size() - set<char>(combined.begin(), combined.end()).size();Как перевести это небольшое количество кода на C++ на C?

Вот то, что я до сих пор:

#include <string.h> 
#include <stdlib.h> 
#include <stdio.h> 

int cost[10][10]; 
char team[10]; 
int perm[10]; 

int main() { 

    int R,j; 
    scanf("%d", R); 

    for (j=0; j<R; j++) { 
     scanf("%d", team[j]); 
     perm[j] = j; 
    } 

    // calculate all-pairs costs 
    int a , b; 
    for (a=0; a < R; a++) 
     for (b=0; b < a; b++) { 
      strcat(team[a], team[b]); 
      int overlap = combined.size() - set<char>(combined.begin(), combined.end()).size(); 
      cost[a][b] = cost[b][a] = overlap; 
     } 

    // determine best permutation 
    int best = 27*R; 
    do { 
     int count=0; 
     for (int j=0; j < R-1; j++) 
      count += cost[perm[j]][perm[j+1]]; 
     best = min(best,count); 
    } while (next_permutation(perm,perm+R)); 

    printf("%d\n", best); 
} 

Если вы, ребята, можете укажите, где мои другие ошибки или кто-нибудь может помочь мне перевести это, я был бы очень благодарен.

+0

Ваш компилятор укажет вам некоторые ошибки. –

ответ

0

Вы переведенный string, как char, это неправильно, для быстрого грязного раствора, вы можете определить team таким образом:

char team[10][100]; 

Но более крепкий раствор, вы бы определить char *team[10] и распределять и перераспределять при чтении и конкатенации.

Вам по-прежнему необходимо перевести set<char>(combined.begin(), combined.end()).size().

+0

как бы перевести набор (объединенный.begin(), объединенный.end()). Размер()? – HiWorld567

+0

'объединенный' должен быть отдельным массивом, где вы вычисляете объединение строк' команда [a] 'и' team [b] ', ваш текущий подход не работает, так как вы изменяете команду' team [a] '. Трудно перевести программу, если вы не понимаете, что она делает. – chqrlie

0

scanf(format, ...) требует указателей на переменные, так что функция scanf знает, где хранить вход. Например)

scanf("%d", &R); 
Смежные вопросы