Diário de aprendizagem "Algorithm Note" - par 6.8 de detalhes de uso comuns e arquivo de cabeçalho do algoritmo 6.9 - funções comumente usadas

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 → _ →.

Publicado 54 artigos originais · ganhou 27 · visualizações 4983

Acho que você gosta

Origin blog.csdn.net/weixin_42257812/article/details/105348908
Recomendado
Clasificación