Quiz Luogu : structure cyclique

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,un2unn, 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\le100n100one0 ≤ ai ≤ 1000 0\ eta_i \et0unje1000 .

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 100001n100001 ≤ k ≤ 100 1 \leq k \leq 1001k100 .

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^91un1 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\le131n13 .

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 n50)。

!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×( n1 )×( n2 )××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 501n50 .

【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 20n20 , 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 0X9 ) 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^61n1 06 0 ≤ x ≤ 9 0\le x \le 9 0X9 .

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 151k15 .

[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^41k1 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++( n1 )+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 1001n100 .

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}^51Ldix5 .

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 ] ( 5un<b100 ,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 < 1000s<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 480n48 .

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,un2unn, 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 1001n1000 ≤ ai ≤ 1000 0\le a_i \le 10000unje1000 .

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^41n1 041 ≤ ai ≤ 1 0 9 1 \leq a_i \leq 10^91unje1 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 1n2×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 ( n1 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 10003n1000 , 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. x , kx,kx ,k est un entier positif et satisfait1 ≤ x ≤ 100 1 \le x \le 1001X100 .

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 -XX ,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;
}

Je suppose que tu aimes

Origine blog.csdn.net/weixin_62529383/article/details/133237280
conseillé
Classement