Capítulo 3: Conceptos básicos de programación Liquidación 2 - Enumeración y conversión de unidades Enumeración 2

enumeración 2

Tabla de contenido

enumeración 2

Primera tarjeta de preguntas

         Descripción de la pregunta

restricciones operativas

Pregunta 2 línea recta

Descripción de la pregunta

restricciones operativas

Pregunta 3 fecha palíndromo

Descripción de la pregunta

Introduce la descripción

Descripción de salida

Muestras de entrada y salida

restricciones operativas

Pregunta 4 Fecha legal

Descripción de la pregunta

Introduce la descripción

Descripción de salida

Muestras de entrada y salida

restricciones operativas

Pregunta 5: La suma de números especiales.

Descripción de la pregunta

Introduce la descripción

Descripción de salida

Muestras de entrada y salida

Pregunta 6: El mono divide los plátanos

Descripción de la pregunta

restricciones operativas


Primera tarjeta de preguntas

Descripción de la pregunta

Esta pregunta es para completar espacios en blanco, solo necesita calcular el resultado y usar la declaración de salida en el código para generar el resultado completo.

Little Blue tiene muchas tarjetas numéricas y cada tarjeta tiene los números del 0 al 9.

Xiao Lan va a usar estas tarjetas para deletrear algunos números. Quiere deletrear números enteros positivos comenzando desde 1. Cada vez que deletrea uno, lo guardará. Las tarjetas no se pueden usar para deletrear otros números.

Xiao Lan quiere saber cuánto puede obtener de 1.

Por ejemplo, cuando Little Blue tiene 30 cartas, incluidas 3 cartas cada una del 0 al 9, Little Blue puede deletrear del 1 al 10,

Pero cuando se escribe 1, solo hay una carta 1, que no es suficiente para escribir 11.

Ahora Xiao Lan tiene 2021 cartas del 0 al 9 en su mano, un total de 20210 cartas. ¿Cuántas cartas puede obtener Xiao Lan del 1?

Consejo: Se recomienda utilizar programación informática para solucionar el problema.

restricciones operativas

  • Tiempo máximo de funcionamiento: 1s
  • Memoria máxima en funcionamiento: 128M

#include <iostream>
using namespace std;
int num[10];
int main()
{
  for(int i=0;i<10;i++) num[i]=2021;
  int ans =1;
  while(true){
    int x =ans;
    while(x){
      int now = x% 10;
      if(num[now] >0) num[now]--;
      else break;
      x/=10;
    }
    if(x) break;
    ans++;
  }
  cout << ans -1 <<endl;
	return 0;
}

Para asignar valores a una matriz, use un bucle for.

Pregunta 2 línea recta

Descripción de la pregunta

Esta pregunta es para completar espacios en blanco, solo necesita calcular el resultado y usar la declaración de salida en el código para generar el resultado completo.

En el sistema de coordenadas cartesiano plano, dos puntos pueden determinar una línea recta. Si hay varios puntos en una línea recta, entonces la línea recta determinada por dos de estos puntos es la misma.

Dados 2 × 3 puntos enteros en el plano {(x, y)|0 ≤ x < 2, 0 ≤ y < 3, x ∈ Z, y ∈ Z}(x,y)∣0≤x<2,0 ≤ y<3,x∈Z,y∈Z​, es decir, el punto donde la abscisa es un número entero entre 0 y 1 (incluidos 0 y 1) y la ordenada es un número entero entre 0 y 2 (incluidos 0 y 2). Estos puntos definen un total de 11 rectas diferentes.

Dados 20 × 2120 × 21 puntos enteros en el plano {(x, y)|0 ≤ x < 20, 0 ≤ y < 21, x ∈ Z, y ∈ Z}(x,y)∣0≤x<20, 0≤y<21,x∈Z,y∈Z, es decir, la abscisa es un número entero entre 0 y 19 (incluidos 0 y 19), y la ordenada es un número entero entre 0 y 20 (incluidos 0 y 20​) punto.

¿Cuántas rectas diferentes están determinadas por estos puntos?

restricciones operativas

  • Tiempo máximo de funcionamiento: 1s
  • Memoria máxima en funcionamiento: 128M
#include <bits/stdc++.h>
using namespace std;
struct Point{
    double x,y;
}p[25*25];
map<pair<double,double>,int> line;//pair 存斜率k和截距b,表示直线line

int main()
{
    int cnt = 0;
    int col = 20,row = 21;
    for (int i=0;i<row;i++)
        for(int j=0;j<col;j++){
            p[cnt].x = i;
            p[cnt++].y = j; //先p[cnt].y=j,后再cnt++
        }
    int linenum = row + col;
    for (int i=0;i<cnt;i++)
        for (int j=0;j<cnt;j++){
            if(p[i].x == p[j].x || p[i].y==p[j].y)
                continue;
            double k=(p[j].y-p[i].y)/(p[j].x-p[i].x);
            double b=(p[j].x*p[i].y-p[i].x*p[j].y)/(p[j].x-p[i].x);
            if(line[{k,b}]==0){
                line[{k,b}]=1;
                linenum++;
                
            }
        }
        cout <<linenum<<endl;
    return 0;
}

Estilo apuntado e inclinado. y=kx+b

1. Valor predeterminado del valor del mapa
Al acceder a él utilizando el operador [] del mapa, si no hay ningún valor clave consultado en el mapa, se creará un nuevo par clave-valor. El valor clave es el valor de la consulta y el valor del valor se divide en las dos situaciones siguientes:
Cuando el valor es un tipo integrado, su valor se inicializará a 0.
Cuando el valor es una estructura de datos personalizada, si es un valor predeterminado se define el valor, se inicializará al valor predeterminado; de lo contrario, se inicializará a 0
 

Pregunta 3 fecha palíndromo

Descripción de la pregunta

Durante la Fiesta de la Primavera de 2020, una fecha especial llamó la atención de todos: el 2 de febrero de 2020. Porque si esta fecha se escribe como un número de 8 dígitos en el formato "aaaammdd", es 20200202, que resulta ser un número palíndromo. A estas fechas las llamamos palíndromos.

Algunas personas dicen que 20200202 es un día especial que "ocurre una vez cada mil años". Xiao Ming no está de acuerdo con esto, porque la próxima fecha palíndromo será menos de 2 años después: 20211202, que es el 2 de diciembre de 2021.

Algunas personas también dicen que 20200202 no es solo una fecha palíndromo, sino también una fecha palíndromo tipo ABABBABA. Xiao Ming tampoco está de acuerdo con esto, porque la próxima fecha palíndromo tipo ABABBABA se encontrará dentro de unos 100 años: 21211212, que es el 12 de diciembre de 2121. No es un evento que ocurre "una vez en un milenio", sino como mucho "un evento que ocurre dos veces en un milenio".

Dada una fecha de 8 dígitos, calcule la siguiente fecha del palíndromo y la siguiente fecha del palíndromo tipo ABABBABA después de la fecha.

Introduce la descripción

La entrada contiene un número entero N de ocho bits, que representa una fecha.

Descripción de salida

Genere dos líneas, cada línea contiene 1 número de ocho dígitos. La primera línea representa la próxima fecha del palíndromo y la segunda línea representa la próxima fecha del palíndromo tipo ABABBABA.

Muestras de entrada y salida

Ejemplo

ingresar

20200202

producción

20211202
21211212

restricciones operativas

  • Tiempo máximo de funcionamiento: 1s
  • Memoria máxima en funcionamiento: 256M
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
int D[13] = {-1,31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

bool checkLeapYear(int y){
  if(y%400==0||(y%4==0 && y%100!=0)) return true;
  return false;
}
bool checkABABBABAstyle(string s){
  if(s[0]==s[2]&&s[0]==s[5]&&s[0]==s[7]&&s[1]==s[3]&&s[1]==s[4]&&s[1]==s[6])
    return true;
  return false;
}

int main()
{
  string S,ans1="",ans2="";
  string s,t,year;
  int y,m,d,i;
  cin >>S;
  year=S.substr(0,4); //从第0位置开始,拿走4个
  for (i=stoi(year);ans1==""||ans2=="";i++)//stoi转换成数值
  {
    s = to_string(i);
    t = to_string(i);
    reverse(t.begin(),t.end());
    s+=t; //8位 利用四位的年,构造出来的回文,
    if(s<=S) continue;//20211202
    y = stoi(s.substr(0,4)),m=stoi(s.substr(4,2)),d=stoi(s.substr(6,2));
    if(checkLeapYear(y)) D[2] = 29;else D[2]=28;
    if(m<1 || m>12) continue;
    if(d<1 || d>D[m]) continue;
    if(ans1 =="") ans1 = s;
    if(checkABABBABAstyle(s) && ans2=="") ans2 = s;
  }
  cout <<ans1<<endl<<ans2<<endl;
  // 请在此输入您的代码
  return 0;
}

Convierta una cadena stoi a tipo entero;

substr(0,4) comienza desde la posición 0 de la cadena, cuenta cuatro caracteres, quita y asigna el valor

inversa (t.begin(),t.end()), inversión de cadena, primera dirección y última dirección

Pregunta 4 Fecha legal

Descripción de la pregunta

Xiaolan está en la escuela primaria y la maestra exige a sus compañeros que lleven un diario todos los días durante las vacaciones de verano. Pero Xiaolan estuvo jugando durante todas las vacaciones de verano y no pensó en llevar un diario hasta el último día. Entonces Xiaolan rápidamente compiló algunos diarios y se los dio a la maestra.

Inesperadamente, la maestra pronto descubrió un problema con el diario: resultó que después de que Xiaolan había escrito el diario del 31 de agosto, también había escrito el diario del 32 y 33 de agosto. Esto es obviamente problemático porque no existen el 32 y el 33 de agosto.

Dado un mes y una fecha, ¿existe tal día en 2021?

Introduce la descripción

La primera línea de entrada contiene un número entero mm, que representa el mes.

La segunda línea contiene un número entero dd, que representa la fecha.

Entre ellos, 1≤m≤20, 1≤d≤40.

Descripción de salida

Si hay m mes y día d en 2021, ingréselo  yes; de lo contrario, envíelo  no.

Muestras de entrada y salida

Ejemplo 1

ingresar

8
32

producción

no

Ejemplo 2

ingresar

2
28

producción

yes

restricciones operativas

  • Tiempo máximo de funcionamiento: 1s
  • Memoria máxima en funcionamiento: 128M

#include <iostream>
using namespace std;
int D[13]={
  -1,31,28,31,30,31,30,31,31,30,31,30,31
};
bool checkLeapYear(int y){
  if(y%400==0||(y%4==0&&y%100!=0)) return true;
  return false;
}
int main()
{
  int y=2021;
  int m,d;
  cin >>m>>d;
  if(checkLeapYear(y)) D[2] = 29;
  else D[2] = 28;
  if (m<0||m>13||d<0||d>D[m]) {
    cout <<"no"<<endl;
    return 0;}
  cout <<"yes"<<endl;

  // 请在此输入您的代码
  return 0;
}

Pregunta 5: La suma de números especiales.

Descripción de la pregunta

Xiao Ming está muy interesado en los números que contienen 2, 0, 1 y 9 en los dígitos (excluyendo el 0 inicial). Dichos números del 1 al 40 incluyen 1, 2, 9, 10 a 32, 39 y 40, un total de 28, su suma es 574.

¿Cuál es la suma de todos esos números del 1 al nn?

Introduce la descripción

Formato de entrada:

Ingrese una línea que contenga dos números enteros n (1 <n < 10 ^ 4).

Descripción de salida

Genere una línea que contenga un número entero que represente la suma de los números que satisfacen la condición.

Muestras de entrada y salida

Ejemplo

ingresar

40

producción

574

restricciones operativas

  • Tiempo máximo de funcionamiento: 1s
  • Memoria máxima en funcionamiento: 256M
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
int d[4] = {2,0,1,9};
bool geshu(int m){
  for (int j=0;j<4;j++){
    if (m == d[j]) return true;
  }
  return false;
}
int main()
{
  int n;
  int cnt =0;
  cin >> n;
  int temp;
  for (int i = 1;i<=n;i++){//i = 29
    temp = i;
    while(temp){
      int g = temp%10;
      if(geshu(g)) {
        cnt += i;
        break;
        }
      temp/=10;

    }
  }
  cout <<cnt <<endl;
  // 请在此输入您的代码
  return 0;
}

La i en el bucle for no se puede cambiar. De lo contrario, puede repetirse infinitamente.

Pregunta 6: El mono divide los plátanos

Descripción de la pregunta

Esta pregunta es para completar espacios en blanco, solo necesita calcular el resultado y usar la declaración de salida en el código para generar el resultado completo.

Cinco monos eran buenos amigos y se quedaron dormidos en un cocotero junto al mar. Durante este período, un barco mercante dejó un gran montón de plátanos en la playa y se fue.

El primer mono se despertó, dividió los plátanos en 5 montones, y si quedaba 1 plátano, se lo comía y escondía su porción y seguía durmiendo.

El segundo mono se despertó y dividió los plátanos en 55 montones. Si quedaban 2 plátanos, se los comió, escondió su porción y siguió durmiendo.

El tercer mono se despertó y dividió los plátanos en 5 montones, si quedaban 3 plátanos se los comió y escondió su porción y siguió durmiendo.

El cuarto mono se despertó y dividió los plátanos en 5 montones, si quedaban 4 plátanos se los comió y escondió su porción y siguió durmiendo.

El quinto mono se despertó y dividió los plátanos en 5 montones en partes iguales, jaja, ¡exactamente no quedaba nada!

Calcule la cantidad mínima de plátanos al principio.

restricciones operativas

  • Tiempo máximo de funcionamiento: 1s
  • Memoria máxima en funcionamiento: 128M

#include <iostream>
using namespace std;
int main()
{
  int i =1;

  int res = 0;
  while(1){
    res = i;
    for (int j=1;j<=5;j++){
      
      if(res%5==0 &&j==5&&res>0) 
      {
        cout << i<<endl;
        return 0;
        }
      if (res%5==j&&res>0){
        res = res-j;
        res = res*4/5;
      }
      else break;
    }
    i++;
  }
  return 0;
}

Supongo que te gusta

Origin blog.csdn.net/lishijie258/article/details/128632587
Recomendado
Clasificación