Red de conocimiento informático - Aprendizaje de programación - preguntas 3 del examen de pascal gratuito noip1999

preguntas 3 del examen de pascal gratuito noip1999

1.cantor

var i, j, k, n: entero largo

comenzar

escribir('N=') ;

readln(n);

k:=1

mientras ngt;k

comienza

<; p> n:=n-k;

k:=k 1;

end;

si k mod 2=0 entonces writeln(n,'', k-n 1)

else writeln(k-n 1, '', n);

end.

2. Esta pregunta también es muy simple. Simplemente prueba algunas habilidades básicas de programación. No hay ninguna dificultad. Siempre que tenga cuidado, podrá obtener puntos fácilmente por esta pregunta. El número aquí está representado por una cadena (por supuesto, también son posibles otros métodos) porque es conveniente de procesar. La suma N-aria es lo más destacado de esta pregunta. El procesamiento es el siguiente: 1) Caracteres: gt; puede usar matrices para simplificar el programa, es decir, matrices de dígitos y caracteres 2) Al realizar la suma, conserve cada una. dígito y acarreo, y desea realizar una suma de alta precisión. g es llevar.

const

paso: entero=0;

caracteres: matriz[0..15] de char=('0','1',' 2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E' , 'F');

var

dígito: matriz[char] de entero;

i, n, g: entero m, s: cadena

ok:boolean;

comenzar

para i:=0 a 9 hacer dígito[char(ord('0') i)]:= i;

para i:=0 a 5 do digit[char(ord('A') i)]:=i

write('n=');

readln(n);

escribir('m=');

readln(s);

para i:= 1 a longitud(es) hacer

s[i]:=upcase(s[i]);

repetir

ok:=true

repita p>

para i:=1 hasta longitud(es) div 2 haga

si s[i]lt;gt;s[longitud(es) 1-i] entonces ok:=false;

si está bien entonces rompe;

inc(paso);

m:=s; >

for i :=longitud(m) hasta 1 hacer

comenzar

s[i]:=chars[(digit[m[i]] digit[m[ longitud(m) 1- i]] g) mod n]

g:=(dígito[m[i]] dígito[m[longitud(m) 1-i]] g) div n ;

fin;

si ggt; 0 entonces s:=chars[g] s; >si está bien, entonces w

riteln('STEP=', paso) else

writeln('Impossible');

end.

3. Presupuesto del viajero

Hay dos métodos:

1:

programar viaje(entrada, salida);

const max=1000;

var i, n: longint;

c, d2: real

p, d, consumir: matriz[0..max ] de real;

función minp(b, e: longint): longint {Encontrar la estación con el precio de petróleo más bajo de atrás hacia adelante entre la estación b y la estación e}

var i, k: entero largo;

tempminp: real;

comenzar

tempminp:=p[e];

/p>

for i:=e-1 downto b do

if p[i]lt; tempminp entonces

comienza tempminp:=p[i]; =i fin;

minp:=k

fin;

función dinero(inicio, parada: entero largo; resto: real): real;

var k: longint;

comenzar

si stop-start=1

entonces dinero:=((d[stop]-d[ inicio])/d2-rest)*p[inicio]

else comenzar

k:=minp(inicio, parada-1);

if klt ;gt;start{La gasolinera con el precio de gasolina más bajo no es la estación de partida}

then money:=money(start,k,rest) money(k,stop,0)

else if d[stop]-d[start]lt;=d2*c{Si llenas el combustible en el punto de inicio, puedes llegar directamente al final del tramo}

entonces dinero:=((d[stop]-d[start] )/d2-rest)*p[start]

else start

k:=minp(start 1, stop -1);

if d[ k]-d[start]lt;=d2*c

entonces{Puedes llegar a la gasolinera k repostando en el punto de partida. }

dinero:=(c-rest)*p [inicio] dinero(k, detener, c-(d[k]-d[inicio])/d2)

{Llena el tanque de combustible en el punto de partida*** reposta c-rest litro, reposta cuando llegues Estación k usa (d[k]-d[start])/d2}

más dinero:= dinero(inicio,k,descanso) dinero(k,parada,0)

fin

fin

fin

comienzo<; /p>

reset(entrada);

reescribir(salida);}

readln(d[0],c,d2,p[0],n);

d[n 1]:=d[0];

p>

para i:=1 an hacer readln(d[i], p[i]

d[0]:=0;

para i :=n hasta 0 consumir[i]:=(d[i 1]-d[i]) /d2;

for i:=0 to n do

si consume[i]gt;c entonces

comienza a escribir('No Solu

tion'); close(output); halt end;

writeln(money(0, n 1, 0): 0: 2 {El número de estación inicial es 0, el número de estación terminal es n); 1}

fin.

2:

programa viaje2(entrada, salida);

const max=1000;

type recordtype=precio récord, contenido: fin real

var i, j, n, punto, cola:

contenido, cambio, distancia2, dinero, uso: real

precio, distancia, consumo: matriz [0..max] de real

petróleo: matriz [0..max] de tipo de registro;

comenzar

restablecer(entrada);

reescribir(salida);}

readln(distancia[0], contenido, distancia2, precio[0] ], n);

distancia[n 1]:=distancia[0];

para i:=1 a n hacer readln(distancia[i], precio[i]

distancia[0]:=0;

para i:=n hasta 0 consume[i]:=(distancia[i 1]-distancia[i]) /distance2 ;

{Calcular el consumo de combustible entre dos estaciones adyacentes}

para i:=0 to n do

si consume[i]gt;content entonces

comenzar writeln('Sin solución'); detener fin;

dinero:=0; cambio:=0;

aceite[ tail ].price:=price[0]*2;

aceite[tail].content:=content;

for i:=0 to n do

comenzar

punto:=cola;

mientras (puntogt;=1) y (oil[punto].pricegt;=precio[i]) hacen

comenzar

cambio:=cambiar aceite[punto].content;

punto:=punto-1

fin;

cola :=punto 1;

petróleo[cola].precio:=precio[i];

petróleo[cola].content:=cambio;

utilizar :=consumir[i]; punto:=1;

mientras (useg

t; 1e-6) y (pointlt; =tail) haz

si usagt;=oil[point].content

entonces comienza

usa:= use-oil[punto].content;

dinero:=dinero oil[punto].content*oil[punto].precio;

punto:=punto 1

fin

si no comenzar

oil[point].content:=oil[point].content-use;

dinero:=uso de dinero* oil[point].price;

use:=0

end;

for j:=punto a cola do oil[j-point 1]: =aceite[j];

cola:=punto de cola 1;

cambio:=consumir[i]

fin;

writeln(dinero: 0: 2);

fin.

Haz cualquier pregunta