Problemas Lenguaje C
mtzreyes23 de Agosto de 2012
11.464 Palabras (46 Páginas)849 Visitas
Problema: Primos
Los organizadores de la limpiada de Informática últimamente se han interesado por los números primos. Un número primo es aquel que sólo se puede dividir entre 1 y él mismo sin dejar residuo (el número 1 no es primo), por ejemplo el 2, 3, 5, 7, 11, 13, etc.
A los organizadores les interesa hacer un programa que sea capaz de encontrar todos los números primos que hay en un rango, por ejemplo todos los primos que hay entre 50 y 1500.
Problema:
Tiene que hacer un programa que sea capaz de encontrar todos los números primos en un cierto rango dado por el usuario (como el de arriba: de 50 a 1500) y siempre estará entre 1 y 10000.
Entrada:
Tu programa deberá pedir dos números que se ingresen desde el teclado. El primero será el límite inferior del rango en el que tienes que encontrar los primos (50 en el ejemplo anterior), y el segundo el límite superior del rango (1500).
Salida:
Tu programa deberá escribir en pantalla todos los números primos que haya encontrado en el rango indicado por el usuario. Los primos que encuentres los deberás escribir ordenados de menor a mayor.
Ejemplo:
En este ejemplo se muestra los datos de entrada solicitados y la salida correspondiente al rango de 7 (como límite inferior) a 35 (como límite superior).
Los datos de entrada se conforman de dos líneas con un número cada una. Como se describe en la sección Entrada, estos números representan el límite inferior y superior del rango de búsqueda (de 7 a 35).
En la salida por pantalla debes escribir todos los números primos que estén en el rango que se indicó en la entrada, escribiendo un número en cada línea, ordenadamente de menor a mayor.
Entrada
(Teclado) Salida
(Pantalla)
7
35 7
11
13
17
19
23
29
31
#include <iostream>
#include <math.h>
using namespace std;
int inf, sup, n, m, flag;
int main()
{
cin >> inf;
cin >> sup;
if ((inf<1) || (sup>10000) || (inf>sup))
cout << "Datos no válidos";
else
{
if (inf%2==0)
inf++;
for (n=inf;n<=sup;n+=2)
{
flag = 0;
m = 3;
while ((flag==0) && (m<=ceil(sqrt(n))))
{
if (n%m==0)
flag = 1;
m+=2;
}
if (flag==0)
cout << n << endl;
}
}
return 0;
}
Problema: Sumandos
Problema:
Se tiene una lista de números enteros diferentes {x1, x2, … , xn}, debes escribir un programa que encuentre dos números xi, xj de la lista tales que xi + xj = M, donde M es un número entero que también se conoce.
Los números de la lista serán enteros entre –1000 y 1000 y la lista tendrá entre 3 y 1000 números. El número M es un número entero entre –2000 y 2000.
Entrada:
Tu programa deberá leer del teclado los siguientes datos, los números N y M, que indican la cantidad de números en la lista y el número que se desea obtener por medio de sumas. Posteriormente, los N números de la lista.
Salida:
Tu programa deberá escribir en la pantalla de la PC el número total de formas de obtener M por medio de sumas de dos números en la lista.
Ejemplo:
Entrada Salida
8
10
–2
7
4
4
6
3
12
10 4
NOTA: Las soluciones posibles para el ejemplo anterior, considerando que N = 8 y M = 10 son:
–2 + 12
7 + 3
4 + 6
4 + 6
Nota que la forma (4 + 6) se toma en cuenta dos veces ya que la lista contiene 2 números cuatro.
#include <iostream>
using namespace std;
int n, m, i, j, k, datos[1000], flag;
int main()
{
cin >> n;
cin >> m;
if ((n<3) || (n>1000) || (m<-2000) || (m>2000))
cout << "Datos no válidos";
else
{
i = 1;
flag = 0;
while ((i<=n) && (flag==0))
{
cin >> datos[i];
if ((datos[i]<-1000) || (datos[i]>1000))
flag = 1;
i++;
}
if (flag==0)
{
k = 0;
for (i=1;i<n;i++)
for (j=i+1;j<=n;j++)
if (datos[i]+datos[j]==m)
k++;
cout << k;
}
else
cout << "Datos no válidos";
}
return 0;
}
Problema: Ordena
Problema:
Cree un programa que lea desde el teclado una lista de N dígitos e imprima en pantalla el número entero más pequeño que se pueda formar utilizando una sola vez todos y cada uno de esos mismos dígitos.
Entrada:
En la primera línea, el número N, tal que 0<=N<=100. En la segunda línea, la lista de dígitos separados por un espacio entre ellos.
Salida:
En una línea y separados por un espacio los dígitos ordenados de tal manera que formen el número entero más pequeño posible.
Ejemplo:
Entrada Salida
10
9 0 5 6 3 8 2 1 3 4 1 2 3 3 4 5 6 8 9
NOTA: Recuerda que el cero solo cuando está a la izquierda no tiene valor
#include <iostream>
using namespace std;
int n, lista[100], i, j, flag, aux;
int main()
{
cin >> n;
if ((n>=0) && (n<=100))
{
for (i=0;i<n;i++)
cin >> lista[i];
for (i=1;i<n;i++)
for (j=0;j<n-1;j++)
if (lista[j]>lista[j+1])
{
aux = lista[j+1];
lista[j+1] = lista[j];
lista[j] = aux;
}
for (i=0;i<=n-1;i++)
if (lista[i]>0)
cout << lista[i] << " ";
}
else
cout << "Datos no válidos";
return 0;
}
Problema: Búsqueda
Descripción:
El fuerte San Juan de Ulúa ubicado en la 4 veces Heroica Ciudad y Puerto de Veracruz, y construido por Hernán Cortés durante la conquista española, es un lugar histórico que, por supuesto, no podemos pasar por alto durante los festejos del bicentenario. Has conseguido visitarlo en un recorrido guiado, pero tu insaciable curiosidad ha hecho que te quedases observando unas extrañas inscripciones en una de las paredes y te has separado del resto del grupo.
Aparentemente nadie ha puesto demasiada atención a estas inscripciones, pero tú crees haber encontrado un patrón en ellas que podría significar algo (aunque no sabes bien qué!). Sin embargo, para estar seguro aún tienes que analizar todas… ¡pero son demasiadas! Claro que esto no es problema, ya que harás un programa que determine si todas cumplen con dicho patrón.
Tu tarea es, dado el número de inscripciones N que hay en la pared, el patrón P que crees haber encontrado y los caracteres de cada una de las inscripciones, determinar si todas las inscripciones contienen el patrón o no.
Para que una inscripción cumpla con la condición, debe contener todas las letras del patrón, en el mismo orden aunque no obligatoriamente juntas. Por ejemplo, dado el patrón “xyz”, las inscripciones “abcxdyezfg” y “xzxyzyxyz” cumplen con la condición, sin embargo, “axbczdyef” no, porque para completar el patrón es necesaria una ‘z’ después de la ‘y’. No necesitas seguir analizando una inscripción después de haber encontrado la primera ocurrencia del patrón, con esa es suficiente.
Si todas las inscripciones cumplen con el patrón, entonces deberás imprimir como salida un 1, de lo contrario imprimirás 0.
Restricciones:
1 ≤ N ≤ 10 El número de inscripciones.
La longitud tanto del patrón como las de las inscripciones estará entre 1 y 20 caracteres, todos alfabéticos (a-z) en letras minúsculas.
Ejemplo:
Entrada (Teclado) Descripción
2
xyz
abcxdyezfg
xzxyzyxyz Línea 1: Un entero N representando el número
...