Calculadora do problema do aperto de mãos
Descubra quantos apertos de mão acontecem quando todos de um grupo se cumprimentam uma única vez: 5 pessoas dão 10 apertos e 4 dão 6, e um total como 10 volta a ser 5 pessoas. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
Exemplo resolvido
- Número de pessoas
- 5
- Modo de cálculo
- forward
- Apertos de mão
- 10
- Máx. de n
- 1.000.000
Esta calculadora do problema do aperto de mãos responde à pergunta clássica de combinatória: se n pessoas se encontram, e cada par aperta as mãos exatamente uma vez, quantos apertos de mão acontecem? A forma fechada é n escolhe dois, escrita C(n, 2) = n(n − 1)/2, os mesmos números triangulares que aparecem na teoria dos grafos como a contagem de arestas do grafo completo K_n. A ferramenta também roda o inverso: dado um total de apertos de mão que seja um valor exato de C(n, 2), ela recupera o único número inteiro não negativo n de pessoas. Pequenas verificações que você já conhece incluem cinco pessoas resultando em dez apertos de mão, quatro pessoas resultando em seis, e zero ou uma pessoa resultando em zero. O mecanismo usa apenas aritmética determinística com BigInt — sem chamadas de rede, sem amostragem e sem atalhos que dependam de data.
O que o problema do aperto de mãos conta e o que a resposta contém
O problema do aperto de mãos é a história cotidiana por trás do coeficiente binomial C(n, 2). Cada aperto de mão é um par não ordenado de pessoas, então o total é o número de maneiras de escolher duas pessoas entre n, sem repetição, e sem levar em conta a ordem. Isso é exatamente n vezes n menos um, dividido por dois, porque você pode enfileirar as pessoas e parear cada uma com todas que vêm depois na fila, sem contar duas vezes.
O mesmo inteiro é o número de arestas no grafo completo em n vértices, o n-ésimo número triangular (menos um), quando indexado cuidadosamente a partir de zero, e um aquecimento padrão em cursos de matemática discreta. Esta calculadora devolve um sinalizador mode de forward ou inverse, a contagem de pessoas n, o total exato de apertos de mão como uma string decimal, uma pequena string de fórmula, como C(5, 2) = 5*(5-1)/2, e o n máximo publicado, para que os clientes validem antes de enviar um lote.
Se você precisar de combinações comuns com um k livre, permutações, ou combinações de multiconjunto com repetição, use essas ferramentas dedicadas; esta página responde apenas à contagem de apertos de mão e seu inverso exato.
Onde as contagens de aperto de mãos se encaixam nos estudos, no código e na modelagem
Estudantes encontram o problema do aperto de mãos quando um livro didático introduz combinações, quando um professor pergunta quantos jogos um torneio de todos-contra-todos precisa, ou quando a teoria dos grafos primeiro define o grafo completo K_n. Professores podem pré-gerar gabaritos para n modestos, sem confiar em aplicativos de calculadora opacos, que arredondam inteiros grandes, ou trocam silenciosamente para notação científica.
Desenvolvedores chamam o mesmo contrato a partir de scripts para gerar vetores de teste determinísticos, dimensionar cargas de trabalho de comparação par a par, ou atender enunciados de desafios de programação que exigem o valor exato de C(n, 2), em vez de uma aproximação em ponto flutuante. A prática de competições costuma precisar de uma fonte rápida e offline de ordens triangulares de aperto de mão, para que as soluções possam ser conferidas sem baixar tabelas da OEIS sob pressão de tempo.
Analistas de produto e de operações usam a contagem ao estimar quantas reuniões um a um, ou arestas não direcionadas únicas, surgem entre n participantes, se cada par interagir uma vez. O caminho inverso é igualmente útil: dado um total de reunião reportado, que alega cobertura par a par completa, recupere n e verifique se o número é combinatoriamente possível, antes que entre em um painel.
Casos de uso
Lição de casa e conferência de combinatória
Consulte totais exatos de C(n, 2) apertos de mão, e inverta contagens triangulares de aperto de mão, para exercícios e provas de livro didático.
Dimensionamento de torneios todos-contra-todos e pares
Conte pares não direcionados entre n participantes, para torneios, planos de reunião, ou estimativas de arestas de grafo completo.
Perguntas frequentes
Como a contagem de apertos de mão é definida?
Se cada par entre n pessoas aperta as mãos uma vez, o total é C(n, 2) = n(n − 1)/2.
O que acontece se n for negativo?
O problema do aperto de mãos exige n ≥ 0.
Por que o resultado é uma string, em vez de um número?
Totais de aperto de mão crescem quadraticamente, e podem exceder os inteiros seguros do JavaScript, para n grande.
Posso descobrir quantas pessoas havia a partir do número de apertos?
Sim. Digite o total de apertos em vez do número de pessoas e você recebe o tamanho do grupo: 10 apertos correspondem a 5 pessoas. Se o total não corresponder exatamente a um grupo, ele é recusado.
Qual é o maior grupo que a calculadora aceita?
Até um milhão de pessoas. Mesmo nesse tamanho o resultado continua exato, embora o número de apertos cresça mais ou menos com o quadrado do tamanho do grupo.
Ferramentas relacionadas
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/combo/handshake \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"n":5}'const res = await fetch("https://api.kit.forhosting.com/combo/handshake", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"n": 5
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/combo/handshake",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"n": 5
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/combo/handshake", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"n":5}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"n":5}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/combo/handshake", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"n": 5
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "combo.handshake",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
max_n | 1000000 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |
Notas técnicas
Contagens negativas de pessoas são rejeitadas com invalid_input, para que células ruins de planilha nunca virem respostas erradas silenciosas.
O que o problema do aperto de mãos conta e o que a resposta contém
Não há caminho aproximado em ponto flutuante apresentado como verdade, e nenhuma amostragem aleatória de pares: o mecanismo constrói o produto exato com BigInt dentro do intervalo suportado, ou rejeita a entrada com invalid_input. Os casos rejeitados incluem tanto n quanto handshakes ausentes, não inteiros, frações, notação científica, valores acima do teto documentado, qualquer n negativo, totais negativos de apertos de mão, e totais de apertos de mão que não sejam exatamente algum C(n, 2).
Como n e handshakes são lidos e como a raiz triangular inversa funciona
Sinais de mais opcionais no início são permitidos em valores não negativos; espaços incorporados, prefixos hexadecimais, e notação exponencial são rejeitados com uma mensagem clara, para que uma célula ruim não vire uma contagem errada. Zero e um para n são válidos, e devolvem zero apertos de mão, coincidindo com o grafo completo vazio e o grafo de um único vértice. Se os dois campos forem fornecidos, o mecanismo verifica a consistência, para que um par incompatível falhe alto, em vez de escolher um lado silenciosamente. Os campos preferenciais são n para o número de pessoas, e handshakes para o total a inverter, mas os apelidos people e persons para n, e h e count para handshakes também são aceitos, para que planilhas, query strings e formulários tipados possam reaproveitar o mesmo contrato. O mecanismo impõe um máximo rígido de um milhão para n, o que mantém a memória e a latência dentro de um orçamento previsível, no caminho gratuito do navegador e no Worker de borda, mesmo os números triangulares crescendo quadraticamente. O modo direto multiplica n por n menos um, com BigInt, e divide por dois, para que produtos intermediários nunca percam dígitos, como os doubles IEEE perderiam depois do quinquagésimo terceiro bit. O modo inverso resolve a quadrática n ao quadrado menos n menos dois h igual a zero, testando se o discriminante um mais oito h é um quadrado perfeito, via raiz quadrada inteira; quando é, e o n resultante é um inteiro dentro do intervalo, esse n é devolvido; caso contrário, invalid_input explica que o total de apertos de mão não é exato. Cada intermediário é um BigInt, e a contagem final de apertos de mão é serializada com toString, para que o JSON nunca trunque valores grandes. Combine a execução gratuita no navegador desta página com a API paga, quando precisar do mesmo resultado matemático dentro de um pipeline automatizado, sem reimplementar sozinho raízes triangulares.
Onde as contagens de aperto de mãos se encaixam nos estudos, no código e na modelagem
Nesta página, o trabalho roda inteiramente no seu navegador; pela API, cada consulta bem-sucedida custa US$ 0,002, a validação que falha não é cobrada, e nada fica armazenado depois que a resposta retorna. Essa divisão — exploração interativa gratuita e uma API paga e idêntica — segue o restante do catálogo tier A do KIT, e permite passar de uma demonstração em sala de aula para um pipeline automatizado, sem mudar o resultado matemático. Combine-a com ferramentas binomiais ou de combinação de multiconjunto, quando precisar de coeficientes relacionados, com contadores de caminhos em grade, quando a ordem dos passos importar, e com outros endpoints de matemática quando estiver montando um pequeno laboratório de auxiliares gratuitos e determinísticos de combinatória.
Casos de integração
Fixtures determinísticos de teste
Gere strings decimais reproduzíveis de aperto de mão, para testes unitários, verificações de propriedades, e asserções de CI, sem manter tabelas manualmente.
Perguntas técnicas
Quanto custa a calculadora do problema do aperto de mãos?
É gratuita no seu navegador, nesta página. Pela API, uma solicitação bem-sucedida custa US$ 0,002; entradas inválidas não são cobradas.
Posso recuperar n a partir de um total de apertos de mão?
Sim. Informe handshakes (ou h / count). O total precisa ser igual a algum C(n, 2) exato; caso contrário, a solicitação falha com invalid_input.