概述
目录
题目 A: 数组排序
题目描述
输入
输出
样例输入
样例输出
代码
题目 B: n!的尾部0的个数
题目描述
输入
输出
样例输入
样例输出
代码
题目 C: 录取加分
题目描述
输入
输出
样例输入
样例输出
代码
题目 D: 区间内素数个数
题目描述
输入
输出
样例输入
样例输出
代码
题目 E: x的n次方(Python)
题目描述
输入
输出
样例输入
样例输出
代码
题目 F: 猴子跳台阶
题目描述
输入
输出
样例输入
样例输出
代码
题目 G: 骨牌铺方格
题目描述
输入
输出
样例输入
样例输出
代码
题目 H: 求一个数列的最大项
题目描述
输入
输出
样例输入
样例输出
代码
题目 A: 数组排序
题目描述
任意给定整数n,及一组由n个元素构成的数a1、a2、a3、…、an, 你的任务是对这n个数进行排序。
输入
有若干组测试数据。每一组测试数据由2行组成,其第1行上有一个整数n,(1≤n≤1000),第2行上有n个整数,表示你要对这n个数进行排序。
输出
对输入中的每一组待排序的数据,输出该数组经从小到大排序后的数组元素,元素之间有一个空格,尾部无多余空格。
样例输入
3 25 2 5 17 23 949 123 23 334 12 245 3 45 66 21 -34 5 6 7 22 34
样例输出
2 5 25 -34 3 5 6 7 12 21 22 23 23 34 45 66 123 245 334 949
代码
#include<iostream>
using namespace std;
void kp(int a[][1000], int i, int j, int n) {
if (i > j)
return;
int temp = a[n][i];
int l = i;
int r = j;
while (i != j) {
while (i < j && a[n][j] >= temp)
{
j--;
}
a[n][i] = a[n][j];
while (i < j && a[n][i] <= temp)
{
i++;
}
a[n][j] = a[n][i];
}
a[n][i] = temp;
kp(a, l, i - 1, n);
kp(a, i + 1, r, n);
}
int main() {
static int a[100][1000] = { 0 };
static int n[100];
int i = 0, s = 0;
while (cin>>n[i]) {
s++;
for (int k=0; k < n[i];k++) {
cin >> a[i][k];
}
i++;
}
for (int o = 0; o < s; o++) {
kp(a, 0, n[o] - 1, o);
for (int p = 0; p < n[o]; p++) {
if (p != n[o] - 1)
cout << a[o][p] << " ";
else
cout << a[o][p];
}
cout << endl;
}
return 0;
}
题目 B: n!的尾部0的个数
题目描述
给定一个正整数n,计算n!的尾部0的个数。
输入
输入数据有若干行。每行上有一个正整数n,(0<n<32767),对应一种情形。
输出
对于每一种情形,先输出“Case #: ”(#为数据序号,从1起),然后输出n的值,逗号,结果,换行。
样例输入
8 20 100
样例输出
Case 1:8,1 Case 2:20,4 Case 3:100,24
代码
#include<iostream>
using namespace std;
int count0(int n) {
int count = 0;
while (n != 0) {
count += n / 5;
n = n / 5;
}
return count;
}
int main() {
static int n[1000];
int i = 0;
while (cin>>n[i]) {
i++;
}
for (int j = 0; j < i; j++) {
cout << "Case " << j + 1 << ":" << n[j] << "," << count0(n[j]) << endl;
}
}
题目 C: 录取加分
题目描述
输入
输出
对输入中的每组数据,从高到低输出经过加分处理后的分数数据,数据之间有一个空格,尾部无多余空格。
样例输入
3 673 1 578 0 630 1 5 582 0 580 1 578 1 580 0 575 0
样例输出
703 660 578 610 608 582 580 575
代码
#include<iostream>
using namespace std;
void kp(int a[], int i, int j) {
if (i > j)
return;
int temp = a[i];
int l = i;
int r = j;
while (i != j) {
while (i < j && a[j] <= temp)
{
j--;
}
a[i] = a[j];
while (i < j && a[i] >= temp)
{
i++;
}
a[j] = a[i];
}
a[i] = temp;
kp(a, l, i - 1);
kp(a, i + 1, r);
}
int main() {
static int n[1000],s[1000];
int i = 0, sum = 0, f;
while (cin >> n[i]) {
if (n[i] > 30 || n[i] < 1)
return 1;
for (int j = sum; j < sum+n[i]; j++) {
cin >> s[j];
cin >> f;
if (f == 1)
s[j] += 30;
}
sum = sum + n[i];
i++;
}
sum = 0;
for (int p = 0; p < i; p++) {
kp(s, sum, sum + n[p]-1);
for (int q = sum; q < sum + n[p]; q++) {
if (q != sum + n[p] - 1)
cout << s[q] << " ";
else
cout << s[q];
}
cout << endl;
sum = sum + n[p];
}
return 0;
}
题目 D: 区间内素数个数
题目描述
给定正整数a,b,输出两个正整数a,b之间(包括a,b)的全部素数。
输入
先输入一个正整数T,代表需要处理的区间对数,接下来T行,每行输入两个正整数a,b(a<b<1000),代表要统计素数的区间范围。
输出
对每一对区间,按从小到大顺序一行输出该区间内的全部素数。
样例输入
2 200 300 2 9
样例输出
211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293 2 3 5 7
代码
#include<iostream>
using namespace std;
bool panduan(int n) {
if (n > 1) {
for (int i = 2; i < n; i++) {
if (n % i == 0)
return false;
}
return true;
}
else {
return false;
}
}
int main() {
int T;
cin >> T;
int* a = new int[T];
int* b = new int[T];
for (int i = 0; i < T; i++) {
cin >> a[i];
cin >> b[i];
}
for (int i = 0; i < T; i++) {
for (int j = a[i]; j <= b[i]; j++) {
if (j != b[i] && panduan(j))
cout << j << " ";
else if (panduan(j))
cout << j;
}
cout << endl;
}
delete[]a;
delete[]b;
return 0;
}
题目 E: x的n次方(Python)
题目描述
计算一任意数x的n次方,即 y=xn (n>=0,x>0).
输入
第 1 行给出正整数 T,是测试用例的个数。随后给出 T 组测试用例,每组占一行,顺序给出整数 x 和 n(0<x<100,0<=n<1000)。整数间以空格分隔。
输出
对每组测试用例,在一行中输出结果y。由于数据比较大,请输出y%10007的值。
样例输入
2 3 5 2 8
样例输出
243 256
代码
T=int(input())
x=[]
n=[]
y=[]
for i in range(0,T,1):
temp = []
temp=list(map(int,input().split()))
x.append(temp[0])
n.append(temp[1])
y.append(int(x[i])**int(n[i]))
for i in range(0,len(y)):
print(str(y[i] % 10007))
题目 F: 猴子跳台阶
题目描述
猴子要爬n级台阶。假设猴子一步可以跳1级或3级台阶。问n级台阶有多少种不同的跳法。
输入
有多组数据,每组一行,其上有一个整数n(0<n<=30)。
输出
对输入的每个整数n,输出n级台阶的不同跳法数Fn。数据Fn。可能比较大,只需输出模100007的值Fn(mod 100007) 。
样例输入
3 4
样例输出
2 3
代码
#include<iostream>
using namespace std;
long long res(int n) {
if (n == 1 || n == 2) {
return 1;
}
if (n == 3) {
return 2;
}
int sum = 0;
if (n > 3) {
sum = res(n - 1) + res(n - 3);
}
return sum;
}
int main() {
int n[100];
long long fn[100];
int i = 0;
while (cin >> n[i]) {
fn[i] = res(n[i]);
i++;
}
for (int j = 0; j < i; j++) {
cout << fn[j] % 100007 << endl;
}
return 0;
}
题目 G: 骨牌铺方格
题目描述
有 2×n的一个长方形方格,用一个1*2的骨牌铺满方格。问对给出的任意一个n(n>0), 铺法总数有多少种?
输入
有多组数据,每组一行,其上有一个整数n(0<n<=40)。
输出
对输入的每个整数n,输出2×n的方格用1*2型铺满的不同方法总数Fn。数据Fn可能比较大,只需输出模100007的值Fn(mod 100007) 。
样例输入
3 5
样例输出
3 8
代码
#include<iostream>
using namespace std;
int main() {
int cfx[50], i = 0;
cfx[1] = 1, cfx[2] = 2;
for (int j = 3; j <= 40; j++)
cfx[j] = cfx[j - 1] + cfx[j - 2];
int n[100];
while (cin >> n[i]) {
i++;
}
for (int j = 0; j < i; j++) {
cout << cfx[n[j]] % 100007 << endl;
}
return 0;
}
题目 H: 求一个数列的最大项
题目描述
有如下的数列an,满足:
a1=1,a2i=ai+1;a2i+1=ai+ai+1;
求该数列的第n项及前n项中的最大值M。
输入
有多组数据,每组一行,其上有一个整数n(0<n<=100)。
输出
对输入的每个整数n,该数列的第n项及前n项中的最大值M。
样例输入
5 8
样例输出
5 5 4 6
代码
#include<iostream>
using namespace std;
int main() {
int a[101];
a[1] = 1;
int n[100], j = 0;
for (int i = 1; i <= 49; i++) {
a[2 * i] = a[i] + 1;
a[2 * i + 1] = a[i] + a[i + 1];
}
a[100] = a[50] + 1;
while (cin >> n[j]) {
j++;
}
for (int i = 0; i < j; i++) {
int max = a[1];
for (int k = 1; k <= n[i]; k++) {
if (max < a[k])
max = a[k];
}
cout << a[n[i]] << " " << max << endl;
}
}
最后
以上就是风趣丝袜为你收集整理的C++算法与设计学习记录题目 A: 数组排序题目 B: n!的尾部0的个数题目 C: 录取加分题目 D: 区间内素数个数题目 E: x的n次方(Python)题目 F: 猴子跳台阶题目 G: 骨牌铺方格题目 H: 求一个数列的最大项的全部内容,希望文章能够帮你解决C++算法与设计学习记录题目 A: 数组排序题目 B: n!的尾部0的个数题目 C: 录取加分题目 D: 区间内素数个数题目 E: x的n次方(Python)题目 F: 猴子跳台阶题目 G: 骨牌铺方格题目 H: 求一个数列的最大项所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复