Tabla de contenido
1. Estructura de entrada de primer nivel
2. Estructura de entrada anidada
En segundo lugar, la estructura de entrada de primer nivel.
HDU 1089 A+B para Práctica Entrada-Salida (I)
HDU 1090 A+B para Práctica Entrada-Salida (II)
HDU 1091 A+B para Prácticas Entrada-Salida (III)
HDU 1095 A+B para Práctica Entrada-Salida (VII)
3. Estructura de entrada anidada
HDU 1092 A+B para Práctica de Entrada-Salida (IV)
HDU 1093 A+B para práctica de entrada-salida (V)
HDU 1094 A+B para práctica de entrada-salida (VI)
HDU 1096 A+B para Práctica Entrada-Salida (VIII)
CodeForces 616A Comparación de dos enteros largos
(2) Función alternativa de gets
(4) matriz de caracteres + cin
1. Ingrese números enteros y reales
2. Utilice cadenas para ingresar números enteros y reales.
CSU 1340 Un problema de muestra
3. Ingrese una combinación de números y caracteres.
1. Estructura de entrada
1. Estructura de entrada de primer nivel
Las estructuras de entrada se dividen en 4 categorías:
- Ingrese solo un caso de uso
- Ingrese casos de uso hasta casos de uso especiales: HDU 1091
- Ingrese casos de uso hasta el final del archivo: HDU 1089
- Ingrese un número entero t primero y luego ingrese t casos de uso: HDU 1090
Cada caso de uso tiene una condición final clara.
2. Estructura de entrada anidada
Cada caso de uso puede contener varias partes. Cada parte puede incluir ingresar solo un caso de uso, ingresar casos de uso hasta casos de uso especiales, ingresar primero un número entero t y luego ingresar t casos de uso, etc. Cada caso de uso puede continuar anidado en su interior. . . .
En segundo lugar, la estructura de entrada de primer nivel.
HDU 1089 A+B para Práctica Entrada-Salida (I)
tema:
Descripción
Tu tarea es calcular a + b.
¡¿Demasiado fácil?! ¡Por supuesto! Diseñé especialmente el problema para principiantes en acm.
Debes haber descubierto que algunos problemas tienen los mismos títulos que este, sí, todos estos problemas fueron diseñados para el mismo objetivo.
Aporte
La entrada constará de una serie de pares de números enteros a y b, separados por un espacio, un par de números enteros por línea.
Producción
Para cada par de números enteros de entrada a y b, debe generar la suma de a y b en una línea, y con una línea de salida para cada línea de entrada.
Entrada de muestra
1 5 10 20
Salida de muestra
6 30
Código:
<iostream>
using namespace std;
int main()
{
int a, b;
while (cin >> a >> b)cout << a + b << endl;
return 0;
}
HDU 1090 A+B para Práctica Entrada-Salida (II)
tema:
Descripción
Tu tarea es calcular a + b.
Aporte
La entrada contiene un número entero N en la primera línea y luego siguen N líneas. Cada línea consta de un par de números enteros a y b, separados por un espacio, un par de números enteros por línea.
Producción
Para cada par de números enteros de entrada a y b, debe generar la suma de a y b en una línea, y con una línea de salida para cada línea de entrada.
Entrada de muestra
2 1 5 10 20
Salida de muestra
6 30
Código:
<iostream>
using namespace std;
int main()
{
int n, a, b;
cin >> n;
while (n--)
{
cin >> a >> b;
cout << a + b << endl;
}
return 0;
}
HDU 1091 A+B para Prácticas Entrada-Salida (III)
tema:
Descripción
Tu tarea es calcular a + b.
Aporte
La entrada contiene varios casos de prueba. Cada caso de prueba contiene un par de números enteros a y b, un par de números enteros por línea. Un caso de prueba que contiene 0 0 finaliza la entrada y este caso de prueba no se procesará.
Producción
Para cada par de números enteros de entrada a y b, debe generar la suma de a y b en una línea, y con una línea de salida para cada línea de entrada.
Entrada de muestra
1 5 10 20 0 0
Salida de muestra
6 30
Código:
<iostream>
using namespace std;
int main()
{
int a, b;
while (cin >> a >> b)
{
if (a == 0 && b == 0)break;
cout << a + b << endl;
}
return 0;
}
HDU 1095 A+B para Práctica Entrada-Salida (VII)
tema:
Descripción
Tu tarea es calcular a + b.
Aporte
La entrada constará de una serie de pares de números enteros a y b, separados por un espacio, un par de números enteros por línea.
Producción
Para cada par de números enteros de entrada a y b, debe generar la suma de a y b, seguida de una línea en blanco.
Entrada de muestra
1 5 10 20
Salida de muestra
6 30
Código:
#include<iostream>
using namespace std;
int main()
{
int a, b;
while (cin >> a >> b)cout << a + b << endl << endl;
return 0;
}
3. Estructura de entrada anidada
HDU 1092 A+B para Práctica de Entrada-Salida (IV)
tema:
Descripción
Tu tarea es calcular la suma de algunos números enteros.
Aporte
La entrada contiene varios casos de prueba. Cada caso de prueba contiene un número entero N, y luego siguen N números enteros en la misma línea. Un caso de prueba que comienza con 0 finaliza la entrada y este caso de prueba no debe procesarse.
Producción
Para cada grupo de números enteros de entrada, debe generar su suma en una línea y con una línea de salida para cada línea de entrada.
Entrada de muestra
4 1 2 3 4 5 1 2 3 4 5 0
Salida de muestra
10 15
Código:
#include<iostream>
using namespace std;
int main()
{
int n, a, sum;
while (cin >>n)
{
if (n == 0)break;
sum = 0;
while (n--)
{
cin >> a;
sum += a;
}
cout << sum << endl;
}
return 0;
}
HDU 1093 A+B para práctica de entrada-salida (V)
tema:
Descripción
Tu tarea es calcular la suma de algunos números enteros.
Aporte
La entrada contiene un número entero N en la primera línea y luego siguen N líneas. Cada línea comienza con un número entero M, y luego siguen M enteros en la misma línea.
Producción
Para cada grupo de números enteros de entrada, debe generar su suma en una línea y con una línea de salida para cada línea de entrada.
Entrada de muestra
2 4 1 2 3 4 5 1 2 3 4 5
Salida de muestra
10 15
Código:
#include<iostream>
using namespace std;
int main()
{
int t, n, a, sum;
cin >> t;
while (t--)
{
cin >> n;
sum = 0;
while (n--)
{
cin >> a;
sum += a;
}
cout << sum << endl;
}
return 0;
}
HDU 1094 A+B para práctica de entrada-salida (VI)
tema:
Descripción
Tu tarea es calcular la suma de algunos números enteros.
Aporte
La entrada contiene varios casos de prueba y un caso, una línea. Cada caso comienza con un número entero N, y luego siguen N números enteros en la misma línea.
Producción
Para cada caso de prueba, debe generar la suma de N enteros en una línea y con una línea de salida para cada línea de entrada.
Entrada de muestra
4 1 2 3 4 5 1 2 3 4 5
Salida de muestra
10 15
Código:
#include<iostream>
using namespace std;
int main()
{
int n, a, sum;
while (cin >> n)
{
sum = 0;
while (n--)
{
cin >> a;
sum += a;
}
cout << sum << endl;
}
return 0;
}
HDU 1096 A+B para Práctica Entrada-Salida (VIII)
tema:
Descripción
Tu tarea es calcular la suma de algunos números enteros.
Aporte
La entrada contiene un número entero N en la primera línea y luego siguen N líneas. Cada línea comienza con un número entero M, y luego siguen M enteros en la misma línea.
Producción
Para cada grupo de números enteros de entrada, debe generar su suma en una línea y debe tener en cuenta que hay una línea en blanco entre las salidas.
Entrada de muestra
3 4 1 2 3 4 5 1 2 3 4 5 3 1 2 3
Salida de muestra
10 15 6
Código:
#include<iostream>
using namespace std;
int main()
{
int t, n, a, sum;
cin >> t;
while (t--)
{
cin >> n;
sum = 0;
while (n--)
{
cin >> a;
sum += a;
}
cout << sum << endl;
if (t)cout << endl;
}
return 0;
}
Cuarto, ingresa la cadena.
(1) obtiene función
Las cadenas de entrada del lenguaje C están representadas por matrices de caracteres.
La función gets lee la línea completa de entrada hasta que encuentra un carácter de nueva línea, luego descarta el carácter de nueva línea, almacena otros caracteres y agrega un '\0' al final.
CodeForces 616A Comparación de dos enteros largos
tema:
Descripción
Se le dan dos números enteros muy largos a , b (se permiten ceros a la izquierda). Debes comprobar qué número a o b es mayor o determinar que son iguales.
El tamaño de entrada es muy grande, por lo que no utilice la lectura de símbolos uno por uno. En lugar de eso, utilice la lectura de una línea o token completo.
Como la entrada/salida puede alcanzar un tamaño enorme, se recomienda utilizar métodos rápidos de entrada/salida: por ejemplo, prefiera usar scanf/printfin en lugar de cin/cout en C++, prefiera usar BufferedReader/PrintWriter en lugar de Scanner/System.out en Java . No use la funcióninput() en Python2 en lugar de usar la función raw_input().
Aporte
La primera línea contiene un número entero no negativo a .
La segunda línea contiene un número entero no negativo b .
Los números a , b pueden contener ceros a la izquierda. Cada uno de ellos contiene no más de 106 dígitos.
Producción
Imprima el símbolo "<" si a < b y el símbolo ">" si a > b . Si los números son iguales, imprima el símbolo "=".
Entrada de muestra
Aporte
9 10
Producción
<
Aporte
11 10
Producción
>
Aporte
00012345 12345
Producción
=
Aporte
0123 9
Producción
>
Aporte
0123 111
Producción
>
Simplemente compara el tamaño de dos números enteros, es muy simple.
La razón principal es que no estoy familiarizado con el lenguaje C.
Código:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char*s1 = new char[1000000];
char*s2 = new char[1000000];
int l1, l2;
char c;
while (gets(s1) && gets(s2))
{
l1 = strlen(s1);
l2 = strlen(s2);
int i = 0, j = 0;
while (s1[i] == '0'&& l1)
{
i++;
l1--;
}
while (s2[j] == '0'&& l2)
{
j++;
l2--;
}
if (l1 > l2)c='>';
else if (l1 < l2)c='<';
else
{
while (s1[i])
{
if (s1[i]>s2[j])
{
c = '>';
break;
}
if (s1[i]<s2[j])
{
c = '<';
break;
}
i++;
j++;
l1--;
}
if (l1 == 0)c = '=';
}
printf("%c\n", c);
}
return 0;
}
(2) Función alternativa de gets
Puedes usar fgets o gets_s en lugar de la función gets. Las funciones de la función son diferentes pero similares.
(3) escanear
scanf es la forma de leer palabras, ignora todos los espacios en blanco al principio y finaliza cuando lee cualquier carácter de espacio en blanco.
HDU 5842 Lweb y cuerda
tema:
Esta pregunta consiste en seleccionar una asignación de un conjunto de 26 letras a un conjunto de números enteros y luego encontrar la longitud máxima de la subsecuencia creciente más larga de la secuencia correspondiente a la matriz de caracteres en cada fila.
Si crees que estoy hablando de programación dinámica, eres estúpido.
Debido a que el mapeo puede ser opcional, el significado de esta pregunta es ingresar una cadena (solo letras minúsculas) y generar cuántas letras minúsculas diferentes tiene.
Sí, así es, ya está, se fue.
Código:
#include<iostream>
#include<cstring>
using namespace std;
char c[100001];
int l[26];
int main()
{
int t;
scanf("%d", &t);
for (int cas = 1; cas <= t; cas++)
{
scanf("%s", c);
int len = strlen(c);
for (int i = 0; i < 26; i++)l[i] = 0;
for (int i = 0; i < len; i++)l[c[i] - 'a']++;
int sum = 0;
for (int i = 0; i < 26; i++)sum += (l[i]>0);
printf("Case #%d: %d\n", cas, sum);
}
return 0;
}
(4) matriz de caracteres + cin
(4.1)cin
cin ingresa una cadena representada por una matriz de caracteres y finaliza la entrada cuando encuentra un carácter en blanco.
Como CSU 1260, CSU 1059, CSU 1019
(4.2)cin.getline
cin.getline puede leer la línea completa de la cadena, descartando el carácter de nueva línea después de cada línea leída.
Como CSU 1029
(4.3) cin.obtener
cin.get es muy similar a cin.getline, pero las nuevas líneas no se descartan sino que continúan colocándose en el búfer de entrada.
CSU 2050
(5) cuerda
(5.1)cin
La cadena de entrada cin termina con un carácter en blanco, como CSU 1041, CSU 1112, robot de control remoto CSU 1042.
(5.2) obtener línea
getline lee una línea completa, como POJ 1035
5. Ingrese otro contenido
El contenido de entrada se puede clasificar simplemente en dos tipos, números y cadenas. Si se clasifica con cuidado, hay muchos tipos.
1. Ingrese números enteros y reales
Ingresar números enteros es la situación más común y hay muchos ejemplos, como la serie HDU IO anterior.
Los problemas CSU 1000/1001/1002 A+B cubren los problemas de entrada y salida de números enteros ordinarios, enteros grandes y números reales.
CSU 1000 A+B (I)
Descripción
Tu tarea es calcular a + b.
Aporte
La entrada contiene varios casos de prueba. Cada caso de prueba consta de un par de números enteros a y b(0<=a,b<=20), separados por un espacio, un par de números enteros por línea.
Producción
Para cada par de números enteros de entrada a y b, debe generar la suma de a y b en una línea, y con una línea de salida para cada línea de entrada.
Entrada de muestra
1 1
Salida de muestra
2
Código:
#include<iostream>
using namespace std;
int main()
{
inta, b;
while(cin >> a >> b)
{
cout << a + b << endl;
}
return 0;
}
CSU 1001 A+B (II)
Descripción
Tu tarea es calcular a + b.
Aporte
Hay varios casos de prueba. Cada caso de prueba contiene solo una línea. Cada línea consta de un par de números reales a y b(0<=a,b<=1000000), separados por un espacio.
Producción
Para cada caso, genere la respuesta en una línea redondeada a 4 dígitos después del punto decimal.
Entrada de muestra
15
10 20
0,1 1,5
Salida de muestra
6.0000
30.0000
1.6000
Código:
#include<iostream>
using namespace std;
int main()
{
double a, b;
while(cin >> a >> b)
{
printf("%.4f",a+b);
cout << endl;
}
return 0;
}
CSU 1002 A+B (III)
Descripción
Tu tarea es calcular a + b.
Aporte
Hay varios casos de prueba. Cada caso de prueba contiene solo una línea. Cada línea consta de un par de números enteros a y b(1=< a,b <=1016), separados por un espacio. La entrada va seguida de una sola línea con a = 0, b = 0, que no debe procesarse.
Producción
Para cada par de números enteros de entrada a y b, debe generar la suma de a y b en una línea, y con una línea de salida para cada línea de entrada.
Entrada de muestra
1 5
10 20
10000000000000000 10000000000000000
0 0
Salida de muestra
6
30
20000000000000000
Código:
#include<iostream>
using namespace std;
int main()
{
long long a, b;
while(cin >> a >> b)
{
if(a == 0 && b == 0)break;
cout << a + b<<endl;
}
return 0;
}
2. Utilice cadenas para ingresar números enteros y reales.
CSU 1340 Un problema de muestra
tema:
Descripción A mi novia le encanta el 7, ¡cree que es una suerte! Si un número entero contiene uno o más 7, ¡ella también pensará que es suerte! Aporte La primera línea tiene un número entero T (1 <= T <= 100), lo que significa que hay T casos de prueba. Producción Para cada caso de prueba, si X contiene uno o más 7, genere "Lucky" (sin comillas); de lo contrario, genere "Unlucky" (sin comillas). Entrada de muestra Salida de muestra |
PISTA
Usamos este tema principalmente para sentir cómo debería ser un tema de competencia ACM completo.
El "formato" de la pregunta de la competencia ACM en sí es obvio:
la primera parte es una descripción de la pregunta, que explica los antecedentes de la pregunta, qué tareas necesita programar para completar, etc.
La segunda parte es la convención de entrada, que le indicará si la pregunta tiene varios conjuntos de datos de prueba, el formato de cada conjunto de datos de prueba, el tipo de cada parámetro (entero, número de punto flotante, cadena, etc.) y el rango de valores, etc.
La tercera parte es el acuerdo sobre la salida, es decir, qué contenido debe generar su programa y cuál es el formato específico.
La cuarta parte son algunos ejemplos. Estos ejemplos solo le muestran una parte de los datos de la prueba y las respuestas correspondientes. El propósito es ayudarlo a comprender mejor el significado de la pregunta y los requisitos del formato de salida.
Es posible que esté lleno de preguntas como yo cuando entré en contacto con ACM por primera vez. Aquí le enumeraré algunas preguntas comunes: <1>
Si la pregunta tiene varios conjuntos de datos, ¿tenemos que combinar todos los datos como ¿El ejemplo? ¿Los resultados se calculan primero y luego se generan juntos?
Esto no es necesario. Puede generar los resultados correspondientes a este conjunto de datos inmediatamente después de procesar un conjunto de datos.
Pero si escribe estos ejemplos manualmente, encontrará que la entrada y la salida se mezclan en la pantalla, a diferencia de los ejemplos donde la entrada y la salida están separadas. ¿Esto no cumplirá con los requisitos? Entonces lea <2>, creo que sus preguntas serán respondidas.
<2> ¿Cómo sabe OJ (juez en línea) si mi programa está escrito correctamente?
OJ no analiza inteligentemente si su código es correcto o no, pero utiliza otra idea ingeniosa para juzgar si su programa cumple con los requisitos: "alimentar" algunos datos de entrada a su programa (como cuando ingresa datos en el teclado) (como presionar Ingrese después de escribir algo) y luego compare lo que su programa "produce" (igual que lo que su programa genera tal como lo ve en la pantalla) con la respuesta estándar. Si la respuesta obtenida por el programa es exactamente la misma que la respuesta estándar, entonces pasará la pregunta.
Por lo tanto, no importa si la entrada y la salida en la pantalla se mezclan cuando ingresa manualmente el ejemplo, siempre y cuando su programa "produzca" algo exactamente igual a la respuesta estándar.
Es precisamente debido a este mecanismo de juicio que no debe permitir que el programa imprima algunas declaraciones rápidas, como "Ingrese dos números enteros", etc., porque todo lo que genere su programa se comparará con la respuesta estándar. Responda una pregunta como esta sin una declaración que requiera salida, será muy diferente de la respuesta estándar y, naturalmente, pensará que su programa es incorrecto.
Vale la pena mencionar que aunque dicho mecanismo de juicio no parece poder saber perfectamente si su programa es correcto (¿piense por qué?), si los datos de la prueba son lo suficientemente sólidos, "su programa es correcto" La probabilidad será muy alto.
<3> ¿Por qué mi programa pasó todos los ejemplos, pero al final no pasó esta pregunta?
La muestra de la pregunta es solo una pequeña parte de los datos de la prueba. El propósito es ayudarlo a comprender mejor el significado de la pregunta y los requisitos del formato de salida. Por lo tanto, aprobar la muestra no significa que todos los datos de la prueba puedan ser pasado. Solo al aprobar todos los datos del examen podrá obtener "Aceptar", lo que significa que ha aprobado la pregunta.
<4> Después de que se generen las respuestas a cada conjunto de datos de prueba, ¿es necesario ajustarlas en líneas?
Sí, incluso si no se indica explícitamente en la pregunta, debemos generar un "avance de línea" (es decir, "\n") después de generar las respuestas a cada conjunto de datos de prueba, tal como lo indica el ejemplo.
A continuación, hablemos de la idea de este tema. Creo que todos deberían haber pensado en el algoritmo: simplemente juzgue si cada dígito del número entero leído es 7.
Código:
#include<iostream>
#include<cstring>
using namespace std;
char c[10];
int main()
{
ios_base::sync_with_stdio(false);
int t;
cin >> t;
while (t--)
{
cin >> c;
int f = 0;
for (int i = 0; i < strlen(c); i++)if (c[i] == '7')f = 1;
if (f)cout << "Lucky" << endl;
else cout << "Unlucky" << endl;
}
return 0;
}
La pregunta de ACM es así, es obvio que la entrada es un número entero, pero puedo pensar completamente que la entrada es cada carácter, solo necesito ver si cada carácter es 7, sin ningún cálculo matemático.
demás
CSU 1003
CSU 1053
HDU 1717 Fracciones decimales 2
3. Ingrese una combinación de números y caracteres.
CodeForces 697B Barnicle
4. Datos tabulares
SGU 454 Kakuro
5. Otras técnicas de entrada
(1) Ignorar la entrada
Parte del contenido de entrada no es necesario, por lo que puede omitir las variables.
Si ingresa tres números enteros msn, pero no es necesario s, entonces el código es:
int main()
{
int m, n;
cin >> m >> n >> n;
......
Si la entrada que debe ignorarse se clasifica en último lugar, incluso este tipo de cobertura no es necesaria, simplemente no la ingrese directamente. OJ no requiere que todos los datos de entrada se ingresen en el programa, OJ solo verifica la salida.