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 ; p>
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