La tâche d'aujourd'hui, cinq questions par jour, est le résultat de quatre jours, et je prévois de l'écrire en Python et C.
Source des questions : https://www.luogu.com.cn/training/102#problems
1. [Base profonde 4. Exemple 2] Trouver la valeur minimale
Lien vers les questions : https://www.luogu.com.cn/problem/P5718
Description des questions
donne nnn etnnn entiersai a_iunje, s'il te plaît, nnQuelle est la plus petite valeur parmi n entiers ?
Format d'entrée
La première ligne entre un entier positif nnn , représente le nombre de nombres.
Entrez nn sur la deuxième lignen entiers non négatifs, représentanta 1 , a 2 … an a_1,a_2 \dots a_nun1,un2…unn, séparés par des espaces.
Format de sortie
Afficher un entier non négatif représentant ce nnLa plus petite valeur parmi n entiers non négatifs .
Exemple 1
Exemple d'entrée n° 1
8
1 9 2 6 0 8 1 7
Exemple de sortie n° 1
0
indice
Données garanties, n ≤ 100 n\le100n≤100one0 ≤ ai ≤ 1000 0\ eta_i \et0≤unje≤1000 .
code(python)
num = int(input())
a = list(map(int, input().split()))
a.sort()
print(a[0])
Code (C)
#include<string.h>
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
int main()
{
int n;
scanf("%d",&n);
int min = 1000;
for(int i = 1;i <= n;i++)
{
int num;
scanf("%d",&num);
if(num < min)
{
min = num;
}
}
printf("%d\n",min);
return 0;
}
2. [Base profonde 4. Exemple 3] Moyenne de classification
Lien vers les questions : https://www.luogu.com.cn/problem/P5719
Description des questions
Étant donné nnn etkkk , passera de 1 ànnTous les entiers positifs compris entre n peuvent être divisés en deux catégories : Les nombres de catégorie A peuvent être kk est divisible (c'est-à-direkkmultiples de k ), alors que les nombres de classe B ne le peuvent pas. Veuillez indiquer la moyenne de ces deux types de nombres, avec une précision de1 11 chiffre, séparé par des espaces.
Les données garantissent que le nombre des deux types de nombres ne sera pas 0 00 .
Format d'entrée
Entrez deux entiers positifs nnn etkkk .
Format de sortie
Sortez une ligne, deux nombres réels, représentant respectivement le nombre moyen de classe A et de classe B. Précis à une décimale près.
Exemple 1
Exemple d'entrée n° 1
100 16
Exemple de sortie n° 1
56.0 50.1
indice
Garantie des données, 1 ≤ n ≤ 10000 1 \leq n\leq 100001≤n≤10000,1 ≤ k ≤ 100 1 \leq k \leq 1001≤k≤100 .
code(python)
# num = int(input())
#
# a = list(map(int, input().split()))
# a.sort()
# print(a[0])
n, k = map(int, input().split(" "))
i = 1
B_num = 0
B_sum = 0
A_num = 0
A_sum = 0
while i <= n:
if i % k == 0:
A_num += 1
A_sum += i
i += 1
else:
B_sum += i
B_num += 1
i += 1
print(round(A_sum/A_num, 1),round(B_sum/B_num, 1))
Code (C)
#include<string.h>
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
int main()
{
int n, k;
scanf("%d%d",&n,&k);
int x = 0,y = 0;
int sum = 0,num = 0;
for(int i = 1;i <= n;i++)
{
if(i % k == 0)
{
sum = sum + i;
x++;
}
if(i % k != 0)
{
num = num + i;
y++;
}
}
double a = 1.0*sum/x*1.0;
double b = 1.0*num/y*1.0;
printf("%.1lf %.1lf",a,b);
return 0;
}
3. [Fondation profonde 4. Exemple 4] Chai à un pied
Lien vers les questions : https://www.luogu.com.cn/problem/P5720
Description des questions
"Zhuangzi" a dit : "Si vous prenez la moitié d'un bâton d'un pied chaque jour, il sera inépuisable pour l'éternité." Le premier jour, il y a une durée de aaA partir du lendemain, il faut couper chaque jour la moitié du bâton (en divisant2 par 2 à chaque fois).2 , arrondi à l'inférieur). Dans les prochains jours, la longueur du bâton deviendra1 11?
Format d'entrée
Entrez un entier positif aaa , représente la longueur du bâton.
Format de sortie
Afficher un entier positif, indiquant le nombre de jours pendant lesquels la longueur du bâton deviendra 1 11 .
Exemple 1
Exemple d'entrée n° 1
100
Exemple de sortie n° 1
7
indice
Garantie des données, 1 ≤ a ≤ 1 0 9 1 \le a\le 10^91≤un≤1 09 .
code(python)
# num = int(input())
#
# a = list(map(int, input().split()))
# a.sort()
# print(a[0])
import math
n = int(input())
sum = 1
half = n
while half != 1:
half = int(half / 2)
sum += 1
print(sum)
Code (C)
#include<string.h>
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
int main()
{
long long n;
scanf("%lld",&n);
int sum = 1;
long long half = n;
while(half !=1)
{
half = half/2;
sum++;
}
printf("%d\n",sum);
return 0;
}
4. [Base profonde 4. Exemple 6] Triangle rectangle numérique
Lien vers les questions : https://www.luogu.com.cn/problem/P5721
Description des questions
donne nnn , veuillez afficher un angle droit dont la longueur du côté estnnn nombre triangle rectangle. Tous les nombres sont2 2Composé de 2 chiffres, s'il n'y a pas de 2 22 chiffres additionnent0 00 .
Format d'entrée
Entrez un entier positif nnn .
Format de sortie
Affichez le triangle rectangle numérique comme l'exige la question.
Exemple 1
Exemple d'entrée n° 1
5
Exemple de sortie n° 1
0102030405
06070809
101112
1314
15
indice
Garantie des données, 1 ≤ n ≤ 13 1\le n\le131≤n≤13 .
code(python)
# num = int(input())
#
# a = list(map(int, input().split()))
# a.sort()
# print(a[0])
import math
n = int(input())
i = n
x = 1
while i >= 0:
j = i - 1
# print("i:",i)
while j >= 0:
# print("j:", j)
if x < 10:
print("0%d" % x, end="")
x += 1
else:
print("%d" % x, end="")
x += 1
j -= 1
print("")
i -= 1
Code (C)
#include<string.h>
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
int main()
{
int n;
scanf("%d",&n);
int x = 1;
for(int i = n;i >= 0;i--)
{
for(int j = i-1;j >= 0;j--)
{
if(x < 10)
{
printf("0%d",x);
x++;
}
else
{
printf("%d",x);
x++;
}
}
printf("\n");
}
return 0;
}
5. [Groupe de vulgarisation NOIP1998] Somme des factorielles
Lien vers les questions : https://www.luogu.com.cn/problem/P1009
Description des questions
Calculez avec une grande précision S = 1 ! + 2 ! + 3 ! + ⋯ + n ! S = 1! + 2! + 3! + \cdots + n!S=1 !+2 !+3 !+⋯+n!( n ≤ 50 n \le 50 n≤50)。
où !
représente une factorielle, définie comme n ! = n × ( n − 1 ) × ( n − 2 ) × ⋯ × 1 n!=n\times (n-1)\times (n-2)\times \cdots \times 1n !=n×( n−1 )×( n−2 )×⋯×1 . Par exemple,5 ! = 5 × 4 × 3 × 2 × 1 = 120 5! = 5 \times 4 \times 3 \times 2 \times 1=1205 !=5×4×3×2×1=120 .
Format d'entrée
un entier positif nnn .
Format de sortie
un entier positif SSS , représente le résultat du calcul.
Exemple 1
Exemple d'entrée n° 1
3
Exemple de sortie n° 1
9
indice
【plage de données】
Pour 100 % 100 \%100 % des données,1 ≤ n ≤ 50 1 \le n \le 501≤n≤50 .
【Autres instructions】
Remarque : Cette question est utilisée comme exemple dans « Bases approfondies », mais sa plage de données est uniquement n ≤ 20 n \le 20n≤20 , cette question ne peut pas être résolue en utilisant le code du livre.
Si vous souhaitez répondre à cette question, veuillez continuer à étudier les connaissances de haute précision du chapitre 8.
code(python)
n = int(input())
b = 0
for i in range(1, n + 1):
c = i
a = 1
while c != 0:
a = a * c
c = c - 1
b = b + a
print(b)
Code (C)
#include<stdio.h>
int main() {
int n;
int temp;
int i, j;//进行阶乘和求和时的临时变量
while(scanf("%d", &n)!=EOF){
int m[100] = {
0};//存储阶乘结果
int num[1000] = {
0};//存储求和结果
int len = 1, count = 0, C = 0, D = 0;//len为阶乘结果的位数,count为求和结果的位数;C为求阶乘时的进位,D为求和时的进位
m[0] = 1;//0的阶乘为1
for (i = 1; i <= n; i++) {
for (j = 0; j < len; j++) {
temp = m[j];
m[j] = (temp * i + C) % 10;
C = (temp * i + C) / 10;
}
while (C != 0) {
m[len] = C % 10;
C = C / 10;
len++;
}//以上两个循环用来求阶乘结果
for (count = 0; count < len; count++) {
//求完阶乘直接加
temp = num[count];
num[count] = (temp + m[count] + D) % 10;
D = (temp + m[count] + D) / 10;
}
while (D != 0) {
m[count + 1] += D % 10;
D = D / 10;
count++;
}//以上两个循环用来求阶乘之和结果
}
for (i = count - 1; i >= 0; i--)
printf("%d", num[i]);
printf("\n");
}
return 0;
}
6. [Groupe de vulgarisation NOIP2013] Problèmes de comptage
Lien vers les questions : https://www.luogu.com.cn/problem/P1980
Description des questions
Essayez de calculer dans l'intervalle 1 11 ànnParmi tous les entiers de n , le nombre xxx( 0 ≤ x ≤ 9 0\le x\le9 0≤X≤9 ) Combien de fois apparaît-il au total ? Par exemple, en1 11 à11 11En 11 , c'est-à-dire en1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 1,2,3,4,5,6,7,8,9,10,111 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10 ,Dans 11 , le chiffre1 11 est apparu4 44 fois.
Format d'entrée
2 22 entiersn, xn,xn ,x , séparé par un espace.
Format de sortie
1 11 entier, représentantxxLe nombre de fois que x apparaît.
Exemple 1
Exemple d'entrée n° 1
11 1
Exemple de sortie n° 1
4
indice
Pour 100 % 100\%100 % des données,1 ≤ n ≤ 1 0 6 1\le n\le 10^61≤n≤1 06, 0 ≤ x ≤ 9 0\le x \le 9 0≤X≤9 .
code(python)
n,x = list(map(int,input().split()))
# 计数的量
c = 0
# 整数序列
for i in range(1,n+1):
# count() 计数
c += str(i).count(str(x))
print(c)
Code (C)
#include<string.h>
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
int main(){
int n, m;
scanf("%d%d",&n,&m);
int num, sum;
for(int i = 1;i <= n;i++)
{
int pot = i;
while(pot != 0)
{
num = pot%10;
pot = pot/10;
if(num == m) sum++;
}
}
printf("%d",sum);
return 0;
}
7. Résumé de la série [Groupe de vulgarisation NOIP2002]
Lien vers les questions : https://www.luogu.com.cn/problem/P1035
Description des questions
Connu : S n = 1 + 1 2 + 1 3 + … + 1 n S_n= 1+\dfrac{1}{2}+\dfrac{1}{3}+…+\dfrac{1}{n}Sn=1+21+31+…+n1. Évidemment pour tout entier kkk , quandnnLorsque n est suffisamment grand,S n > k S_n>kSn>k .
Maintenant étant donné un entier kkk , nécessaire pour calculer un minimumnnn , tel queS n > k S_n>kSn>k .
Format d'entrée
un entier positif kkk .
Format de sortie
un entier positif nnn .
Exemple 1
Exemple d'entrée n° 1
1
Exemple de sortie n° 1
2
indice
【plage de données】
Pour 100 % 100\%100% des données,1 ≤ k ≤ 15 1\le k \le 151≤k≤15 .
[Source de la question]
Première question du groupe de vulgarisation du NOIP 2002
code(python)
Sn = 0
k = int(input())
i = 1
while True:
Sn = Sn+1.0/i
if Sn > k:
print(i)
break
i += 1
Code (C)
#include <stdio.h>
int main(){
double Sn=0;
int k;
scanf("%d",&k);
int i=1;
while (1)
{
Sn = Sn+1.0/i;
if(Sn>k)
{
printf("%d",i);
break;
}
i++;
}
8. [Groupe de vulgarisation NOIP2015] Pièces d'or
Lien vers les questions : https://www.luogu.com.cn/problem/P2669
Contexte des questions
Groupe de vulgarisation NOIP2015 T1
Description des questions
Le roi versait des pièces d’or comme salaire aux chevaliers fidèles. Le premier jour, le chevalier recevait une pièce d'or ; pendant les deux jours suivants (les deuxième et troisième jours), il recevait deux pièces d'or chaque jour ; pendant les trois jours suivants (les quatrième, cinquième et sixième jours), il reçu trois pièces d'or chaque jour. ;Au cours des quatre prochains jours (le septième, le huitième, le neuvième et le dixième jour), quatre pièces d'or seront reçues chaque jour... ; Ce modèle de paiement des salaires continuera comme ceci : lorsque nn consécutifsReçunn tous les jours pendant n joursAprès n pièces d'or, le chevalier continuera n + 1 n+1n+En 1 jour,n + 1 n + 1n+1 pièce d'or.
Veuillez compter avant kkEn k jours, combien de pièces d’or le chevalier a-t-il obtenu au total ?
Format d'entrée
un entier positif kkk , représente le nombre de jours pour émettre des pièces d'or.
Format de sortie
Un entier positif, le nombre de pièces d’or que le chevalier a reçues.
Exemple 1
Exemple d'entrée n° 1
6
Exemple de sortie n° 1
14
Exemple n°2
Exemple d'entrée n° 2
1000
Exemple de sortie n° 2
29820
indice
[Explication de l'échantillon 1]
Le chevalier reçoit une pièce d'or le premier jour, deux pièces d'or les deuxième et troisième jours et trois pièces d'or les quatrième, cinquième et sixième jours. Par conséquent, un total de 1 + 2 + 2 + 3 + 3 + 3 = 14 est reçu 1+2+2+3+3+3=141+2+2+3+3+3=14 pièces d'or.
Pour 100 % 100\%100 % des données,1 ≤ k ≤ 1 0 4 1\le k\le 10^41≤k≤1 04 .
code(python)
k = int(input())
n,m = 1,0
while k > 0:
k -= n
if k > 0:
m += n*n
n += 1
else:
m += n*(k+n)
print(m)
Code (C)
#include<string.h>
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
int sqr[101];
int app[20001];
int main()
{
int k;//k天
scanf("%d",&k);
int num = 0;
int n = 0;
while(k > num)
{
n++;
num = (n+1)*n/2;
}
long long sum = 0;
if(num != k){
for(int i = 1;i < n;i++)
{
sum = sum + i*i;
}
int m = (n-1)*n/2;
sum = (k - m)*n + sum;
printf("%lld\n",sum);
}
else if(num == k)
{
for(int i = 1;i <= n;i++)
{
sum = sum + i*i;
}
printf("%d\n",sum);
}
return 0;
}
9. [Base profonde 4. Exemple 11] Somme d'une séquence
Lien vers les questions : https://www.luogu.com.cn/problem/P5722
Description des questions
Calculer 1 + 2 + 3 + ⋯ + ( n − 1 ) + n 1+2+3+\cdots+(n-1)+n1+2+3+⋯+( n−1 )+La valeur de n , où l'entier positifnnn n'est pas supérieur à 100. Puisque vous n'êtes pas aussi intelligent que Gauss, vous n'êtes pas autorisé à utiliser la formule de sommation de séquences arithmétiques pour trouver directement la réponse.
Format d'entrée
Entrez un entier positif nnn .
Format de sortie
Génère un entier positif représentant la réponse finale résumée.
Exemple 1
Exemple d'entrée n° 1
100
Exemple de sortie n° 1
5050
indice
Garantie des données, 1 ≤ n ≤ 100 1 \leq n \leq 1001≤n≤100 .
code(python)
n = int(input())
sum1 = 0
for i in range(1, n+1):
sum1 = sum1 + i
print(sum1)
Code (C)
#include<string.h>
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
int main()
{
int n;
scanf("%d",&n);
int sum = 0;
for(int i = 1;i <= n;i++)
{
sum = sum + i;
}
printf("%d",sum);
return 0;
}
10. [Base profonde 4. Exemple 13] Poche de nombres premiers
Lien vers les questions : https://www.luogu.com.cn/problem/P5723
Description des questions
Le petit A possède une poche de nombres premiers, qui peut contenir divers nombres premiers. Il est passé de 2 à 2En partant de 2 , il détermine tour à tour si chaque nombre naturel est un nombre premier. Si c'est un nombre premier, il mettra le nombre dans la poche.
La capacité de charge d'une poche est la somme de tous les chiffres contenus dans la poche.
Cependant, la capacité portante de la poche est limitée et la somme des nombres premiers ne peut pas dépasser LL.L. _ donneLLL , combien de nombres premiers peux-tu mettre dans ta poche ? Affichez ces nombres premiers de petit à grand, puis affichez le nombre maximum de nombres premiers pouvant être pris en charge. Utilisez des nouvelles lignes pour séparer les nombres.
Format d'entrée
Un entier positif LL par ligneL. _
Format de sortie
Affichez ces nombres premiers de petit à grand, puis affichez le nombre maximum de nombres premiers pouvant être pris en charge, avec une ligne vide entre tous les nombres.
Exemple 1
Exemple d'entrée n° 1
100
Exemple de sortie n° 1
2
3
5
7
11
13
17
19
23
9
Exemple n°2
Exemple d'entrée n° 2
5
Exemple de sortie n° 2
2
3
2
Exemple n°3
Exemple d'entrée n° 3
11
Exemple de sortie n° 3
2
3
5
3
indice
Garantie des données, 1 ≤ L ≤ 10 5 1 \le L \le {10}^51≤L≤dix5 .
code(python)
lena = 0
cnt = 0
prime = [1 for i in range(100010)]
lena = int(input())
prime[1] = 0
prime[0] = 0
for i in range(2, 100010):
if prime[i] == 1:
j = i * 2
while j < 100010:
prime[j] = 0
j += i
for i in range(2, 100010):
if prime[i] == 1:
if lena >= i:
print(i)
lena -= i
cnt += 1
else:
break
print(cnt)
Code (C)
#include <stdio.h>
#include <stdlib.h>
int n,x;
long long sum=0;
int pd(int y) {
int i;
for(i=2; i*i<=y; ++i) {
if(y%i==0) return 0;
}
return 1;
}
int main() {
scanf("%d",&n);
if(n<2) {
printf("0\n");
return 0;
} else if(n==2) {
printf("2\n1\n");
return 0;
}
int i;
for(i=2; i<=n; ++i) {
if(i%2==0&&i!=2) continue;
if(sum+i>n) {
printf("%d\n",x);
return 0;
}
if(pd(i)) {
printf("%d\n",i);
sum+=i;
x++;
}
}
return 0;
}
11. [USACO1.5] Palindromes premiers
Lien vers les questions : https://www.luogu.com.cn/problem/P1217
Description des questions
Parce que 151 151151 est à la fois un nombre premier et un palindrome (qui se ressemble de gauche à droite et de droite à gauche), donc151 151151 est un nombre premier palindromique.
Écrivez un programme pour trouver la plage [ a , b ] ( 5 ≤ a < b ≤ 100 , 000 , 000 ) [a,b] (5 \le a < b \le 100 000 000)[ une ,b ] ( 5≤un<b≤100 ,000 ,000 ) (cent millions) tous des nombres premiers palindromiques.
Format d'entrée
La première ligne saisit deux entiers positifs aaa etbbb .
Format de sortie
Affiche une liste de nombres premiers palindromiques, un par ligne.
Exemple 1
Exemple d'entrée n° 1
5 500
Exemple de sortie n° 1
5
7
11
101
131
151
181
191
313
353
373
383
indice
Indice 1 : Générez les palindromes et voyez s’ils sont premiers.
Astuce 1 : Trouvez tous les palindromes et déterminez s'il s'agit de nombres premiers (nombres premiers).
Indice 2 : Générez des palindromes en combinant correctement les chiffres. Vous pourriez avoir besoin de plusieurs des boucles comme ci-dessous.
Astuce 2 : Pour générer le nombre correct de palindromes, vous aurez peut-être besoin de plusieurs boucles comme celle ci-dessous.
La traduction du titre vient de NOCOW.
Formation USACO Section 1.5
produit une longueur de 5 5Le nombre de palindromes de 5 :
for (d1 = 1; d1 <= 9; d1+=2) {
// 只有奇数才会是素数
for (d2 = 0; d2 <= 9; d2++) {
for (d3 = 0; d3 <= 9; d3++) {
palindrome = 10000*d1 + 1000*d2 +100*d3 + 10*d2 + d1;//(处理回文数...)
}
}
}
code(python)
# 输入范围
begin, end = map(int, input().split())
# 定义一个筛选素数的函数,时间复杂度为根号n/3
def prime_number(number):
if number <= 3:
return True
elif number % 2 == 0 or number % 3 == 0:
return False
else:
i = 5
while i * i <= number:
if number % i == 0 or number % (i + 2) == 0:
return False
i += 6
return True
# 定义生成回文数的函数
from itertools import product
def palind(n):
digit_palind = []
half = product(*([range(1, 10, 2)] + [range(10)] * ((n - 1) // 2)))
for i in half:
digit_palind.append(n * '%s' % tuple(list(i) + list(i[-(n % 2) - 1::-1])))
return digit_palind
# 判断终点的数位
numerical_digit = 1
while 10 ** numerical_digit < end:
numerical_digit += 1
for i in range(1, numerical_digit + 1):
for str_num in palind(i):
num = int(str_num)
if num >= begin and num <= end and prime_number(num):
print(num)
Code (C-88 points)
#include <stdio.h>
#include <stdlib.h>
long long a,b;
//判断是否是质数
int pd(long long y) {
long long i;
for(i=2; i*i<=y; ++i) {
if(y%i==0) return 0;
}
return 1;
}
//判断是否是回文数
int hui(long long n)
{
long long num = n;
long long m = 0, a;
while(1){
a = n%10;
m = m*10 + a;
n = n/10;
if( n == 0){
break;
}
}
if(m == num)
return 1;
else
return 0;
}
int main()
{
scanf("%d %d",&a,&b);
long long i = a;
if(a%2 ==0)
a ++;
for(i = a;i <= b;i+=2)
{
if(i%3 != 0)
{
int y = hui(i);
if(y == 1)
{
int x = pd(i);
if(x ==1)
printf("%lld\n",i);
}
}
}
return 0;
}
Code (C-100)
#include<stdio.h>
#include<math.h>
int prime(int n) {
//判定素数
if(n==1)//特判1
return 0;
if(n%2==0)//2的倍数就回家吧
return 0;
else {
//不然就暴力枚举
int i;
for(i=2; i<=sqrt(n); i++) {
if(n%i==0)
return 0;
}
return 1;
}
}
int hw(int n) {
//判定回文,不懂请参考数字反转
int sum=0;
int k=n;
while(n!=0) {
sum=sum*10+n%10;
n/=10;
}
if(sum==k)//判断是否回文
return 1;
else
return 0;
}
int main() {
int i,n,sum=0,m;
scanf("%d %d",&n,&m); //读入两个数
for(i=n; i<=m; i++) {
if(i==9989900) //如果到了这个数,就break
break;
if(hw(i)&&prime(i))//否则判断是否回文和素数
printf("%d\n",i);//输出每个回文质数
}
return 0;//结束程序
}
12. Xiaoyu nage
Lien vers les questions : https://www.luogu.com.cn/problem/P1423
Description des questions
Xiaoyu nageait joyeusement, mais elle a vite découvert avec tristesse qu'elle n'était pas assez forte et que nager était très fatiguant. On sait que Xiaoyu peut nager 2 2 dans le premier pas2 mètres, mais à mesure qu'elle devenait de plus en plus fatiguée et que sa force diminuait, elle ne pouvait nager que 98% 98\%de la distance du pas précédent à chaque pas suivant.98% . Maintenant, Xiaoyu veut savoir si tu veux nager jusqu'à une distance dessDe combien de pas lui faut-il pour nager dans un espace de s mètres ? Veuillez programmer pour résoudre ce problème.
Format d'entrée
Entrez un nombre réel sss (unité : mètre), indique la distance cible à nager.
Format de sortie
Affichez un nombre entier, indiquant le nombre de pas que Xiaoyu doit nager au total.
Exemple 1
Exemple d'entrée n° 1
4.3
Exemple de sortie n° 1
3
indice
Données garanties, 0 ≤ s < 100 0 \leq s < 1000≤s<100 , etsss a au plus une décimale.
code(python)
s = float(input())
num = 0
step = 2
while s > 0:
s = s - step
step = step *0.98
num += 1
print(num)
Code (C)
#include<stdio.h>
int main()
{
float a,b=2,k=2;/*距离可能非整*/
int i=1;/*由于数据弱就int即可*/
scanf("%f",&a);/*输入目标*/
for(i=1;i<=99999999;i++)
{
if(k>a) break;/*判断是否游到目标*/
else
{
b=b*0.98;/*每步能游的距离*/
k=b+k;/*每步结束后的已游总距离*/
}}
printf("%d",i);/*输出步数*/
return 0;
}
13. [Groupe de vulgarisation NOIP2011] Inversion numérique
Lien vers les questions : https://www.luogu.com.cn/problem/P1307
Description des questions
Étant donné un entier NNN , veuillez inverser les chiffres de chaque chiffre de ce numéro pour obtenir un nouveau numéro. Le nouveau nombre doit également satisfaire à la forme courante des entiers, c'est-à-dire que le chiffre le plus élevé du nouveau nombre après inversion ne doit pas être zéro, sauf si le nombre d'origine donné est zéro (voir exemple 2).
Format d'entrée
un entier NNN. .
Format de sortie
Un entier représentant le nouveau nombre après inversion.
Exemple 1
Exemple d'entrée n° 1
123
Exemple de sortie n° 1
321
Exemple n°2
Exemple d'entrée n° 2
-380
Exemple de sortie n° 2
-83
indice
【plage de données】
$-1 000 000 000\leq N\leq $1 000 000 000。
Première question du groupe de vulgarisation noip2011
code(python)
num = input()
if num[0] == "-":
print("-", end="")
print(int(num[:0:-1]))
else:
print(int(num[::-1]))
Code (C)
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int n;
while(scanf("%d",&n)!=EOF){
int m = 0, a;
while(1){
a = n%10;
m = m*10 + a;
n = n/10;
if( n == 0){
break;
}
}
printf("%d\n",m);
}
return 0;
}
14. L'argent est compté lorsque la lune se couche et que le corbeau chante (séquence de Fibonacci)
Lien vers les questions : https://www.luogu.com.cn/problem/P1720
Contexte des questions
(Il n'y a pas de chanson cachée dans cette question... Pas besoin de deviner...)
Le dernier chapitre de "L'histoire d'amour et de chagrin, partie 1·Heartache".
Après avoir mangé la pizza, Yueluowudi savait que cela dépassait son budget. Afin de ne pas montrer ma honte devant le Dieu de l'Amour et de la Douleur, je n'ai eu d'autre choix que de serrer les dents et de compter l'argent...
Description des questions
Après avoir calculé l'argent, Yueluowu a pleuré et a pensé : " Putain, tu m'as trompé, (ci-après lu en Hokkien) je dépendrai de ma mère et de mon père, (ci-après lu en anglais) ce sera Yiteyou ! " Alors quand l'amour et le chagrin Quand le grand dieu a demandé combien c'était, Yueluowudi a dit un tas de charabia. Le Dieu de l'amour et du chagrin a dit : " Oubliez ça, oubliez ça, je demande seulement au nnCombien coûte n type de plats ? « La lune tomba et le corbeau cria :
F n = ( 1 + 5 2 ) n − ( 1 − 5 2 ) n 5 F_n=\dfrac{\left(\frac{1+\sqrt{5}}{2}\right)^n-\left( \frac{1-\sqrt{5}}{2}\right)^n}{\sqrt{5}}Fn=5(21 +5)n−(21 -5)n
Depuis que le Grand Dieu de l'Amour et du Chagrin a appris la programmation, j'ai utilisé 1 1F n F_n a été trouvé en 1 minute.FnLe résultat de. Yueluowu Tiao en fut choqué. Pouvez-vous apprendre l'amour et le chagrin ? Le maître demande F n F_nFnEst-ce que ça vaut le coup?
Format d'entrée
Un nombre naturel nn par lignen .
Format de sortie
seulement 1 11 ligne d'un nombre réelF n F_nFn, à deux décimales près.
Exemple 1
Exemple d'entrée n° 1
6
Exemple de sortie n° 1
8.00
indice
Pour toutes les données : 0 ≤ n ≤ 48 0 \leq n\leq 480≤n≤48 .
code(python)
import math
def jia( n ):
num = float((1 + math.sqrt(5)) / 2)
sum = 1
while n > 0:
sum = float(sum * num)
n -= 1
return sum
def jian( n ):
num = float((1 - math.sqrt(5)) / 2)
sum = 1
while n > 0:
sum = float(sum * num)
n -= 1
return sum
if __name__ == '__main__':
n = int(input())
a = jia(n)
b = jian(n)
num = float((a-b)/math.sqrt(5))
# print(round(num,3))
print("{:.2f}".format(num))
Code (C)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
//函数
double HANSHU(int n){
double num = (pow(((1 + sqrt(5.0))/2.0),n) - (pow(((1 - sqrt(5.0))/2.0),n)))/sqrt(5.0);
return num;
}
int main(int argc, char *argv[]) {
int n;
while(scanf("%d",&n)!=EOF){
double num;
num = HANSHU(n);
printf("%.2lf\n",num);
}
return 0;
}
15. [Deep Foundation 4. Exercice 5] Trouver la plage/valeur de portée maximale
Lien vers les questions : https://www.luogu.com.cn/problem/P5724
Description des questions
donne nnn etnnn entiersai a_iunje, s'il te plaît, nnQuelle est l’étendue de n entiers ? La plage signifie la différence entre la valeur maximale moins la valeur minimale dans un ensemble de nombres.
Format d'entrée
La première ligne entre un entier positif nnn , représente le nombre d'entiers.
Entrez nn sur la deuxième lignen entiera 1 , a 2 … an a_1,a_2 \dots a_nun1,un2…unn, séparés par des espaces.
Format de sortie
Afficher un entier représentant ce nnPlage de n entiers.
Exemple 1
Exemple d'entrée n° 1
6
4 1 5 1 4 1
Exemple de sortie n° 1
4
indice
Garantie des données, 1 ≤ n ≤ 100 1 \leq n\leq 1001≤n≤100,0 ≤ ai ≤ 1000 0\le a_i \le 10000≤unje≤1000 .
code(python)
n = int(input())
num = list(input().split(" "))
max1 = int(num[0])
min1 = int(num[0])
for i in range(0,n-1):
if int(num[i]) > max1:
max1 = int(num[i])
if int(num[i]) < min1:
min1 = int(num[i])
print(max1 - min1)
Code (C)
#include<string.h>
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
int main()
{
int n;
scanf("%d",&n);
int min = 1000, max = 1;
for(int i = 1;i <= n;i++)
{
int num;
scanf("%d",&num);
if(num < min)
{
min = num;
}
if(num > max)
{
max = num;
}
}
printf("%d",max - min);
return 0;
}
16. Le numéro consécutif le plus long
Lien vers les questions : https://www.luogu.com.cn/problem/P1420
Description des questions
La longueur d'entrée est nnUne séquence d'entiers positifs pour n , nécessitant la longueur du nombre consécutif le plus long dans la séquence de sortie.
Les numéros de série font référence à des nombres naturels consécutifs dans une séquence allant du petit au grand.
Format d'entrée
La première ligne, un entier nnn .
Deuxième ligne, nnn entiersai a_iunje, séparés par des espaces.
Format de sortie
Un nombre, le nombre des nombres consécutifs les plus longs.
Exemple 1
Exemple d'entrée n° 1
10
1 5 6 2 3 4 5 6 8 9
Exemple de sortie n° 1
5
indice
Taille des données et conventions
Pour 100 % 100\%100 % de données, garanties1 ≤ n ≤ 1 0 4 1 \leq n \leq 10^41≤n≤1 04,1 ≤ ai ≤ 1 0 9 1 \leq a_i \leq 10^91≤unje≤1 09 .
code(python)
maxn = 0
n = int(input())
a = list(map(int, input().split()))
lena = len(a)
for i in range(n):
s = 0
for j in range(i + 1, n):
if a[j] == a[j - 1] + 1:
s += 1
else:
break
maxn = max(maxn, s)
print(maxn + 1)
Code (C)
#include <stdio.h>
#include <stdlib.h>
#define M 10000
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int n, i, j, count = 0,sum = 0;
scanf("%d",&n);
long long int NUM[M];
for(i = 0;i < n;i++){
scanf("%lld",&NUM[i]);
}
for(j = 0;j <= n;j++){
if(NUM[j] == NUM[j+1] - 1){
count++;
if(count > sum)
sum = count;
}
else count = 0;
}
printf("%d\n",sum+1);
return 0;
}
17. [Groupe de vulgarisation NOIP2012] Factorisation principale
Lien vers les questions : https://www.luogu.com.cn/problem/P1075
Description des questions
Entier positif connu nnn est le produit de deux nombres premiers différents, essayez de trouver le plus grand nombre premier des deux.
Format d'entrée
Entrez un entier positif nnn .
Format de sortie
Afficher un entier positif ppp , qui est le plus grand nombre premier.
Exemple 1
Exemple d'entrée n° 1
21
Exemple de sortie n° 1
7
indice
1 ≤ n ≤ 2 × 1 0 9 1 \le n\le 2\times 10^9 1≤n≤2×1 09
Première question du groupe de vulgarisation du NOIP 2012
code(python)
n = int(input())
m = 2
while n % m != 0:
m += 1
p = int(n / m)
if p <= m:
p = m
print(p)
Code (C)
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
int m = 2;
while(n%m != 0)
{
m++;
}
int p = n/m;
if(p <= m) p = m;
printf("%d",p);
return 0;
}
18. [Base approfondie 4. Exercice 8] Trouver des triangles
Lien vers les questions : https://www.luogu.com.cn/problem/P5725
Description des questions
Imitez l’exemple, imprimez des carrés dans différentes directions, puis imprimez une matrice triangulaire. Il y a une ligne vide au milieu.
Format d'entrée
La taille de la matrice d'entrée, ne dépassant pas 9 99 .
Format de sortie
Sortie de rectangles et de carrés
Exemple 1
Exemple d'entrée n° 1
4
Exemple de sortie n° 1
01020304
05060708
09101112
13141516
01
0203
040506
07080910
code(python)
cnt = 0
n = int(input())
i = 1
while i <= n * n:
if i % n == 1 and i != 1:
print()
# print("\n")
if i < 10:
print("0", end="")
print(i, end="")
i += 1
print()
print()
# print("\n\n")
i = 2 * n
while i > 0:
i -= 2
for j in range(i):
print(" ", end="")
j = 0
while j < (2 * n - i) // 2:
cnt += 1
if cnt < 10:
print("0", end="")
print("%d" % cnt, end="")
j += 1
print()
# print("\n")
Code (C)
#include<string.h>
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
int main()
{
int n;
scanf("%d",&n);
int x = 1;
for(int i = 1;i <= n;i++)
{
for(int j = 1;j <= n;j++)
{
if(x < 10)
{
printf("0%d",x);
x++;
}
else
{
printf("%d",x);
x++;
}
}
printf("\n");
}
printf("\n");
int m = 1;
for(int i = n-1;i >= 0;i--)
{
for(int j = 0;j < i;j++)
{
printf(" ");
}
for(int t = i;t <= n-1;t++)
{
if(m < 10)
{
printf("0%d",m);
m++;
}
else
{
printf("%d",m);
m++;
}
}
printf("\n");
}
return 0;
}
19. [Bases approfondies 4. Pratique 9] Notation
Description des questions
Maintenant il y a n ( n ≤ 1000 ) n(n \le 1000)n ( n≤1 000 juges attribuent des notes aux candidats, avec des notes allant de 0 à 00 à10 1010 . Vous devez supprimer le score le plus élevé et le score le plus bas (s'il y a plusieurs scores les plus élevés ou les plus bas, vous ne devez en supprimer qu'un seul), et la moyenne des notes restantes est le score du joueur. Entrez maintenant le nombre de juges et leurs scores. Veuillez indiquer le score final des candidats, avec une précision de2 2.2ème place décimale.
Format d'entrée
La première ligne entre un entier positif nnn , indiquant qu'il y annn juges.
Entrez nn sur la deuxième lignen entiers positifs,iii entier positif représente leiièmeLa note donnée par les juges.
Format de sortie
Affichez une ligne de deux décimales, indiquant le score final du joueur.
Exemple 1
Exemple d'entrée n° 1
5
9 5 6 8 9
Exemple de sortie n° 1
7.67
indice
Garantie des données, 3 ≤ n ≤ 1000 3 \leq n \leq 10003≤n≤1000 , la note de chaque juge est0 00 à10 1010 (dont0 00 et10 1010 ) un entier entre.
code(python)
n = int(input())
grades = list(map(int, input().split()))
new = sorted(grades)
sum = 0
for i in range (1,n-1):
sum = sum + new[i]
print(float(round(sum/(n-2),2)))
20. [COCI2017-2018#6] Davor
Lien vers les questions : https://www.luogu.com.cn/problem/P4956
Traduction du titre
Après avoir conquis l’Antarctique, Davor s’est lancé dans un nouveau défi. La prochaine étape est une expédition dans le cercle polaire arctique en Sibérie, au Groenland et en Norvège. Il le sera en 2018 20181212 201831 décembre 31À partir du 31, nous devons récolter un total de nn avantn dollars. Il prévoit d'augmenter xxtous les lundis$ x , relancex+k x+kX+k yuans,..., levéx+6k x+6kX+6 000 yuans et52 5252 semaines. oùx , kx,kx ,k est un entier positif et satisfait1 ≤ x ≤ 100 1 \le x \le 1001≤X≤100 .
Maintenant s'il vous plaît, aidez-moi à calculer x, kx,kx ,Quand k vaut, combiennnn yuans.
S'il y a plusieurs réponses, affichez xxx est le plus grand possible,kkk est aussi petit que possible. Attentionkk_k doit être supérieur à0 00 .
Description des questions
Après avoir conquis avec succès le pôle Sud, Davor se prépare à relever de nouveaux défis. La prochaine étape est l’expédition arctique en Sibérie, au Groenland et en Norvège. Il commence son voyage le 31 décembre 2018 et doit alors récupérer N kunas (monnaie croate). Pour ce faire, il a décidé de mettre de côté X (X ≤ 100) kunas chaque lundi dans son fonds de voyage, X + K kunas tous les mardis, X + 2* K tous les mercredis, et ainsi de suite jusqu'à ce que Dimanche, quand il rangera X + 6* K kunas. Il collectera ainsi de l'argent pendant 52 semaines, du 1er janvier 2018 (lundi) au 30 décembre 2018 (dimanche).
Si nous connaissons le montant d'argent N, affichez les valeurs X et K afin qu'il soit possible de collecter le montant d'argent exact dans le laps de temps donné. La solution existera toujours, et s’il y en a plusieurs, affichez celle avec le plus grand X et le plus petit K .
Format d'entrée
La première ligne de saisie contient l'entier N (1456 ≤ N ≤ 145600), le numéro de la tâche.
Format de sortie
La première ligne de sortie doit contenir la valeur de X (0 < X ≤ 100 ), et la seconde la valeur de
K (K > 0 ).
Exemple 1
Exemple d'entrée n° 1
1456
Exemple de sortie n° 1
1
1
Exemple n°2
Exemple d'entrée n° 2
6188
Exemple de sortie n° 2
14
1
Exemple n°3
Exemple d'entrée n° 3
40404
Exemple de sortie n° 3
99
4
code(python)
num = int(input())
n = 1
k = 1
price = int(num / 364)
n = price - 3 * k
k += 1
while n > 100:
n = price - 3 * k
k += 1
print(n)
print(k - 1)
Code (C)
#include<string.h>
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
int main()
{
int n, k = 1;
long long num;
scanf("%lld",&num);
int price = num / 364;
do
{
n = price - 3*k;
k++;
}
while(n > 100);
printf("%d\n",n);
printf("%d\n",k - 1);
return 0;
}
21. [Groupe d'amélioration NOIP2004] Plan d'épargne de Jinjin
Lien vers les questions : https://www.luogu.com.cn/problem/P1089
Description des questions
Jinjin a toujours géré son propre argent de poche. Au début de chaque mois, ma mère donne à Jinjin 300 300Avec 300 yuans, Jinjin budgétisera les dépenses de ce mois-ci, et il pourra toujours rendre les dépenses réelles cohérentes avec le budget.
Afin de permettre à Jinjin d'apprendre à épargner, sa mère a proposé que Jinjin puisse déposer la totalité de la centaine d'argent avec elle à tout moment, et à la fin de l'année, elle ajoutera 20 % 20\%20 % sont restitués à Jinjin. Jinjin a donc élaboré un plan d'épargne : au début de chaque mois, après avoir reçu l'argent de poche de sa mère, si elle espérait avoir plus de 100 100à la fin du mois,100 yuans ou exactement100 100Pour 100 yuans, elle déposera la totalité de la centaine de yuans chez sa mère et gardera le reste entre ses mains.
Par exemple 11 11Début novembre, Jinjin avait encore83 8383 yuans, la mère a donné à Jinjin300 300300 yuans. Jinjin devrait avoir11 ansLes dépenses en novembre sontde 180 180180 yuans, puis elle économisera 200 200avec sa mère200 yuans, gardez183 183183 yuans. Il est11h11Fin novembre , Jinjin aura3 33 yuans.
Jinjin a découvert que le principal risque de ce plan d’épargne était que l’argent déposé auprès de sa mère ne pouvait être retiré avant la fin de l’année. Il est possible qu'au début d'un certain mois, l'argent entre les mains de Jinjin plus l'argent donné par sa mère ce mois-ci ne soit pas suffisant pour respecter le budget initial de ce mois. Si cela se produit, Jinjin devra économiser de l'argent et comprimer le budget ce mois-ci.
Maintenant, basez-vous sur 2004 20042004 11Janvier au12 décembreUtilisez le budget d'allocation mensuel de décembre pour déterminer si cette situation se produira . Sinon, calculez jusqu'à2004 2004Fin 2004 , ma mère a ajouté 20 %à l'argent habituellement épargné par Jinjin.Une fois que 20 % seront restitués à Jinjin, combien d’argent Jinjin aura-t-il entre ses mains.
Format d'entrée
12 1212 lignes de données, chaque ligne contient une valeur inférieure à350 350350 est un entier non négatif, représentant1 1Janvier au12 décembreBudget de décembre Jinjin.
Format de sortie
un nombre entier. S'il n'y a pas assez d'argent pour un certain mois lors de la mise en œuvre du plan d'épargne, sortie − X -X− X ,XXX indique le premier mois au cours duquel cela s'est produit ; sinon production jusqu'en2004 2004De combien d’argent Jinjin disposera-t-il fin 2004 ?
Notez que Luogu n'a pas besoin d'effectuer des entrées et des sorties de fichiers, mais des entrées et des sorties standard.
Exemple 1
Exemple d'entrée n° 1
290
230
280
200
300
170
340
50
90
80
200
60
Exemple de sortie n° 1
-7
Exemple n°2
Exemple d'entrée n° 2
290
230
280
200
300
170
330
50
90
80
200
60
Exemple de sortie n° 2
1580
code(python)
x = 0
y = 0
save = 0
flag = 1
month = 0
for i in range(1, 13):
x += 300
y = int(input())
x -= y
if (x < 0):
flag = 0
month = i
break
save += int(x / 100)
x = x % 100
if (flag == 1):
print(120 * save + x)
else:
print(-month)
Code (C)
#include <stdio.h>
int main()
{
int n;
int sum = 0; //初始化,用于记录每个月剩余有多少钱
int sum0 = 0; //如果中间没有出现缺钱的情况,那么就用这个sum0来存储每个月在妈妈手里有多少钞票
for (int i = 1; i <= 12; i++) //一年十二个月,不多做解释了
{
sum += 300; //妈妈给钱
scanf("%d", &n);
sum = sum - n;
if (sum < 0) //如果消费大于开支则为负数,直接输出ok
{
printf("-%d\n", i); //特别注意负号
return 0;
}
else
sum0 += sum / 100 * 100; //如果不是就往妈妈手里存钱
sum = sum - sum / 100 * 100; //每个孩子手里剩余多少钱
}
printf("%d\n", sum0 * 12 / 10 + sum); //如果上述未有输出,那么就可以打印输出多少钱了
return 0;
}