Diretório
6.8 Explicação detalhada do uso comum do par
ID do Concurso de Codeup: 100000603
Pergunta A: Onde está o centro de gravidade
Descrição do título
Todo mundo conhece a história da descoberta da gravidade por Newton. Desde que Newton descobriu a gravitação, as pessoas resolveram muitos problemas com a teoria da gravitação. Além disso, também sabemos que cada objeto tem seu próprio centro de gravidade.
Agora, dadas as coordenadas dos três vértices do triângulo, você pode calcular o centro de gravidade do triângulo?
A
pergunta de entrada contém vários conjuntos de dados de teste. Digite um número inteiro positivo n na primeira linha, indicando o número de dados de teste.Quando n = 0, a entrada termina.
Nas próximas n linhas, cada linha contém 6 números x1, y1, x2, y2, x3, y3, que representam as coordenadas dos três vértices do triângulo.
Saída
Para cada conjunto de entradas, as coordenadas do centro de gravidade são emitidas e o resultado retém 1 casa decimal.
Entrada de amostra
2
1.0 2.0 3.0 4.0 5.0 2.0
1.0 1.0 4.0 1.0 1.0 5.0
0
Saída de amostra
3.0 2.7
2.0 2.3
A idéia é
relativamente simples: defina os recipientes de três pares p1, p2, p3 para armazenar as informações de cada ponto e as coordenadas do centróide são x = (x1 + x2 + x3) / 3, y = (y1 + y2 + y3 ) / 3.
Código
#include<cstdio>
#include<string.h>
#include<algorithm>
#include<string>
#include<utility>
#include<iostream>
using namespace std;
int main(){
int n;
while(scanf("%d", &n) != EOF){
if(n==0) break;
for(int i=0;i<n;i++){
pair<double, double> p1, p2, p3;
double x1, y1, x2, y2, x3, y3;
scanf("%lf%lf%lf%lf%lf%lf", &x1, &y1, &x2, &y2, &x3, &y3);
p1 = make_pair(x1, y1);
p2 = make_pair(x2, y2);
p3 = make_pair(x3, y3);
double x, y;
x = (p1.first+p2.first+p3.first)/3;
y = (p1.second+p2.second+p3.second)/3;
printf("%.1f %.1f\n", x, y);
}
}
return 0;
}
Sumário
Em geral, o par pode ser considerado como uma estrutura que contém dois elementos.O método de chamar elementos é o mesmo que o da estrutura.Pode ser chamado diretamente clicando-se. Aqui mencionamos que, se você deseja vários elementos, C Existe uma tupla tupla em ++ 11. Da mesma forma, você pode encontrá-la na Referência C ++ fornecida pela última vez:
<tuple> -C ++ O
uso e o par de referências da C ++ são um pouco diferentes.Os leitores interessados podem aprender sobre isso. Estrutura hhhh.
6.9 Funções comuns no arquivo de cabeçalho do algoritmo
ID do Concurso de Codeup: 100000604
Problema A: Encontre o número máximo e mínimo
Descrição do tópico
Primeiro, digite N para indicar o número de números, depois digite N para encontrar o máximo e o mínimo desses N números. N <= 10000, o valor absoluto do número de entrada não é maior que 10 6
Entrada de amostra
4
2 0 1 2
Saída de amostra
2 0
Idéia
Esta questão também é relativamente simples, mas no processo de redação, julgamentos especiais devem ser feitos para os dois casos de N = 1 e N = 2.
Se N≥3, primeiro use max () e min () para calcular os valores máximo e mínimo dos dois primeiros números e, em seguida, use max () e min () para comparar cada bit.
Código
#include<cstdio>
#include<string.h>
#include<algorithm>
#include<string>
#include<iostream>
using namespace std;
const int maxn = 10000;
int a[maxn] = {0};
int main(){
int N;
while(scanf("%d", &N) != EOF){
for(int i=0;i<N;i++) scanf("%d", &a[i]);
if(N==1) printf("%d %d\n", a[0], a[0]);
else{
int MaxNumber = max(a[0], a[1]);
int MinNumber = min(a[0], a[1]);
if(N==2) printf("%d %d\n", MaxNumber, MinNumber);
else{
for(int i=2;i<N;i++){
MaxNumber = max(MaxNumber, a[i]);
MinNumber = min(MinNumber, a[i]);
}
printf("%d %d\n", MaxNumber, MinNumber);
}
}
memset(a, 0, sizeof(a));
}
return 0;
}
Pergunta B: Acordo completo
Título Descrição
Dada uma sequência composta por diferentes letras minúsculas, produza todas as permutações dessa sequência.
Assumimos que para letras minúsculas há 'a' <'b' <… <'y' <'z', e as letras na sequência especificada foram organizadas em ordem de pequena a grande.
Entrada A
entrada é apenas uma linha e é uma sequência composta por diferentes letras minúsculas.O comprimento da sequência é conhecido entre 1 e 6.
Saída
Gera toda a disposição dessa sequência, uma por linha. A ordem alfabética deve ser organizada na frente. A ordem alfabética é definida da seguinte forma:
dado que S = s1s2… sk, T = t1t2… tk, então S <T é equivalente à existência de p (1 <= p <= k), de modo que
s1 = t1, s2 = t2,…, sp-1 = tp-1, sp <tp é estabelecido.
Observe que cada grupo de saída de amostra é seguido por uma linha em branco.
Entrada de amostra
xyz
Saída de amostra
xyz
xzy
yxz
yzx
zxy
zyx
Dica
Será muito conciso usar next_permutation no STL.
Idéia
Desde que o livro seja o mesmo, use a função next_permutation () na forma de do ... while (o iterador é usado para a string, os dois parâmetros entre parênteses são begin () e end ()). Além disso, há prev_permutation () no arquivo de cabeçalho, além de next_permutation (), que retorna a última sequência do arranjo completo.
Esta questão é propensa a erros de formatação, porque requer uma linha em branco após cada saída de amostra.
Código
#include<cstdio>
#include<string.h>
#include<algorithm>
#include<string>
#include<iostream>
using namespace std;
int main(){
string tmp;
while(getline(cin, tmp)){
do{
cout<<tmp<<endl;
}while(next_permutation(tmp.begin(), tmp.end()));
cout<<endl;
}
return 0;
}
Pergunta C: Inversão de matriz
Título Descrição
Digite uma sequência com um comprimento menor ou igual a 200 e, em seguida, faça a saída da matriz ao contrário.
Existem
vários conjuntos de dados de teste de entrada , cada um inserindo uma sequência.
Saída
Para cada conjunto de entradas, por favor, imprima o resultado invertido.
Entrada de amostra
tianqin
Saída de amostra
niqnait
Dica
Observe que a string inserida pode ter espaços.
Idéia
Esta questão não é difícil, basta usar a função reverse (). Deve-se notar que os parâmetros da string precisam preencher o iterador.
Código
#include<cstdio>
#include<string.h>
#include<algorithm>
#include<string>
#include<iostream>
using namespace std;
int main(){
string tmp;
while(getline(cin, tmp)){
reverse(tmp.begin(), tmp.end());
cout<<tmp<<endl;
}
return 0;
}
Sumário
<algorithm> Na verdade, existem muitas funções no arquivo de cabeçalho, incluindo merge (), partição (), pesquisa binária e lower_bound (), upper_bound () etc. na seção de dois ponteiros, etc. Já foi escrito para nós em <algorithm>, basta chamá-lo quando necessário.
Os alunos interessados podem continuar visualizando mais funções no <algorithm> na Referência C ++ e podem encontrar alguns tesouros → _ →.