main(){ while(1){ int num=0; meu(); printf("请输入选择:"); scanf("%d",&num); switch(num){ case 1: fuli(); break; case 2: danli(); break; case 3: principaljisuan(); break; case 4: time(); break; case 5: lilv(); break; case 6: yearmount(); break; case 7: huankuan(); break; } } }
// pega um percentual do vetor para si e o restante distribui entre os filhos void Node::divide_v2(vector<int>& numbers) { //printf("%d vai dividir %lu números\n", rank, numbers.size()); // calcula o rank do filho à esquerda const int left_rank = rank * 2 + 1; // calcula o rank do filho à direita const int right_rank = rank * 2 + 2; vector<int> meu(numbers.begin(), numbers.begin() + conquer_local_size + 1); vector<int> resto(numbers.begin() + conquer_local_size + 1, numbers.end()); // printf("%d pegou %lu números para si e sobraram %lu\n", rank, meu.size(), resto.size()); // calcula a posição da metade do vetor const size_t half_size = resto.size() / 2; // cria dois vetores com cada metade do vetor original vector<int> left(resto.begin(), resto.begin() + half_size); vector<int> right(resto.begin() + half_size, resto.end()); // printf("%d vai enviar %lu números para %d e %lu para %d\n", rank, left.size(), left_rank, right.size(), right_rank); // envia os vetores para os nodos filhos sendToNode(left_rank, left); sendToNode(right_rank, right); conquer(meu); // espera um retorno dos nodos filhos receiveFromNode(left_rank, left); receiveFromNode(right_rank, right); // mescla os retornos dos nodos filhos no vetor original mergeVectors(left, right, resto); // mescla o meu com o novo resto mergeVectors(meu, resto, numbers); }