Problem 1
基础练习 查找整数
资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。
输入格式
第一行包含一个整数n。
第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。
第三行包含一个整数a,为待查找的数。
输出格式
如果a在数列中出现了,输出它第一次出现的位置(位置从1开始编号),否则输出-1。
样例输入
6
1 9 4 8 3 9
9
样例输出
2
数据规模与约定
1 <= n <= 1000。
分析
在数组种挨个找出所要的数字,找到后把位置输出即可。
标程
C++:
#include<map>
#include<list>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<iomanip>
#include<cstring>
#include<iterator>
#include<iostream>
#include<algorithm>
#define R register
#define LL long long
#define pi 3.14159265358979323
using namespace std;
int number[1010];
int main(){
int N;
scanf("%d", &N);
for(R int i = 0; i < N; ++ i){
scanf("%d", &number[i]);
}
int search_number;
scanf("%d", &search_number);
for(R int i = 0; i < N; ++ i){
if(search_number == number[i]){
printf("%d", i + 1);
return 0;
}
}
printf("-1");
return 0;
}
Python:
N = int(input())
number1 = input().split()
number = []
for i in range(0, N):
number.append(int(number1[i]))
search_number = int(input())
for i in range(0, N):
if search_number == number[i]:
print(i + 1)
break
if i == N - 1:
print(-1)
Problem 2
基础练习 杨辉三角形
资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。
它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。
下面给出了杨辉三角形的前4行:
1
1 1
1 2 1
1 3 3 1
给出n,输出它的前n行。
输入格式
输入包含一个数n。
输出格式
输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格。
输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格。
样例输入
4
样例输出
1
1 1
1 2 1
1 3 3 1
数据规模与约定
1 <= n <= 34。
分析
运用二维数组就可以解决这样的问题,需要知道的就是杨辉三角的公式pascal [n] [m] = pascal [n - 1] [m] + pascal [n - 1] [m - 1]通过上面的公式就能解决。
标程
C++:
#include<map>
#include<list>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<iomanip>
#include<cstring>
#include<iterator>
#include<iostream>
#include<algorithm>
#define R register
#define LL long long
#define pi 3.14159265358979323
using namespace std;
int Pascal[50][50];
int main(){
for(R int i = 1; i <= 40; ++ i){
Pascal[i][i] = 1, Pascal[i][1] = 1;
}
for(R int i = 2; i <= 40; ++ i){
for(R int j = 1; j <= i; ++ j){
Pascal[i][j] = Pascal[i-1][j] + Pascal[i-1][j-1];
}
}
int line;
scanf("%d", &line);
for(R int i = 1; i <= line; ++ i){
for(R int j = 1; j <= i; ++ j){
printf("%d", Pascal[i][j]);
if(j != i){
printf(" ");
}
}
if(i != line){
printf("\n");
}
}
return 0;
}
Python:
pascal = [[0] * 40 for _ in range(50)]
pascal[1][1] = 1
for i in range(2, 40):
for j in range(1, i + 1):
pascal[i][j] = pascal[i - 1][j - 1] + pascal[i - 1][j]
line = int(input())
for i in range(1, line + 1):
for j in range(1, i + 1):
if j == i:
print(pascal[i][j], end = '\n')
else:
print(pascal[i][j], end = ' ')
Problem 3
基础练习 特殊的数字
资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
153是一个非常特殊的数,它等于它的每位数字的立方和,即153=111+555+333。编程求所有满足这种条件的三位十进制数。
输出格式
按从小到大的顺序输出满足条件的三位十进制数,每个数占一行。
分析
水仙花数,经典题目,循环就可以解决
标程
#include<map>
#include<list>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<iomanip>
#include<cstring>
#include<iterator>
#include<iostream>
#include<algorithm>
#define R register
#define LL long long
#define pi 3.14159265358979323
using namespace std;
inline int pow(int number){
return number * number * number;
}
int main(){
for(R int i = 100; i <= 999; ++ i){
int number = i;
int number_1, number_2, number_3;
number_1 = number % 10, number /= 10;
number_2 = number % 10, number /= 10;
number_3 = number % 10;
if(i == pow(number_1) + pow(number_2) + pow(number_3)){
printf("%d\n", i);
}
}
return 0;
}
Python:
for i in range(1, 10):
for j in range(0, 10):
for k in range(0, 10):
if(i * i * i + j * j * j + k * k * k == 100 * i + 10 * j + k):
print(100 * i + 10 * j + k)
Problem 4
基础练习 回文数
资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。
输出格式
按从小到大的顺序输出满足条件的四位十进制数。
分析
四轮循环嵌套模拟即可
标程
C++:
#include<map>
#include<list>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<iomanip>
#include<cstring>
#include<iterator>
#include<iostream>
#include<algorithm>
#define R register
#define LL long long
#define pi 3.14159265358979323
using namespace std;
int main(){
for(R int i = 1000; i <= 9999; ++ i){
int number = i;
int number_1, number_2, number_3, number_4;
number_1 = number % 10, number /= 10;
number_2 = number % 10, number /= 10;
number_3 = number % 10, number /= 10;
number_4 = number % 10;
if(number_1 == number_4 && number_2 == number_3){
printf("%d\n", i);
}
}
return 0;
}
Python:
total = int(input())
for i in range(1, 10):
for j in range(0, 10):
for k in range(0, 10):
for r in range(0, 10):
for o in range(0, 10):
if(i == o and j == r and i + j + k + r + o == total):
print(10000 * i + 1000 * j + 100 * k + 10 * r + o)
for i in range(1, 10):
for j in range(0, 10):
for k in range(0, 10):
for r in range(0, 10):
for o in range(0, 10):
for p in range(0, 10):
if(i == p and j == o and k == r and i + j + k + r + o + p== total):
print(100000 * i + 10000 * j + 1000 * k + 100 * r + 10 * o + p)