算法2-9 一元多项式加法运算分数 20
作者 陈越
单位 浙江大学
请编写程序,求两个多项式的和。
输入格式:输入给出两个多项式的信息。对每个多项式,首先在一行中给出其非零项的个数 n,随后按指数递减的顺序给出 n 对 系数 指数,其中 系数 为实数,绝对值均不超过 1000,指数 为不超过 1000 的非负整数。注意:零多项式对应的 n 为 0。
输出格式:按指数递减的顺序输出两个多项式的和的每个非零项,每项占一行,格式为 系数 指数,其中 系数 输出小数点后 2 位。注意:零多项式不输出任何内容。
输入样例:123439 12 15 8 3 2426 19 -4 8 -13 6 82 0
输出样例:12345626.00 199.00 1211.00 8-13.00 63.00 282.00 0
答案12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747 ...
实验1-1 有序数组的插入(C++版)分数 20
作者 刘凯源
单位 华东师范大学
给定存储了n个从大到小排好序的整数,试将任一给定整数x 插入数组中合适的位置,以保持结果依然有序。分析算法在最坏、最好情况下的时间、空间复杂度。具体来说,不妨假设整数序列存储为一个序列 array,这个序列的结构定义在下面给出,数据存放在数组 data中。因为数组长度是有限的,我们在此假设 data数组的最大长度为 kMaxSize。如果在执行插入之前,数组已经满了,则插入失败,返回 false;如果待插入的元素 x 已经在data中,则不要重复插入,返回false;如果插入成功,则返回 true。
函数接口定义:1bool DecrSeqInsert(ArrNode& array, int x);
其中ArrNode定义如下:
123456class ArrNode { public: vector<int> data_; // 使用vector来动态管理数组大小 int size_; // 数组的大小 e ...
算法1-10~11 输出 1 ~ n分数 10
作者 陈越
单位 浙江大学
给定正整数 n,输出 1 ~ n,每个数字占一行。
本题旨在测试不同的算法在各种数据情况下的表现。各组测试数据特点如下:
数据 0:测试基本正确性;
数据 1:n=1;
数据 2:n=1000;
数据 3:n=10000;
数据 4:n=100000;
数据 5:n=1000000。
输入格式:输入在一行中给出正整数 n (≤106)。
输出格式:输出 1 ~ n,每个数字占一行。
输入样例:13
输出样例:123123
法一:1234567891011121314#include <iostream>using namespace std;int main() { int n; cin >> n; // 使用'\n'代替endl,减少缓冲区刷新次数 for (int i = 1; i <= n; i++) { cout << i << '\n'; ...
算法1-7~9 连续子序列最大和分数 25
作者 陈越
单位 浙江大学
给定 n 个整数组成的序列 { a1,a2,⋯,an },“连续子序列”被定义为 { ai,ai+1,⋯,aj },其中 1≤i≤j≤n。“连续子序列最大和”则被定义为所有连续子序列元素的和中最大者。例如给定序列 { -2, 11, -4, 13, -5, -2 },其连续子序列 { 11, -4, 13 } 有最大的和 20。请编写程序,计算给定整数序列的连续子序列最大和。
本题旨在测试各种不同的算法在各种数据情况下的表现。各组测试数据特点如下:
数据 0~6:测试基本正确性;
数据 7:10$^3$ 个随机整数;
数据 8:10$^4$ 个随机整数;
数据 9:10$^5$ 个随机整数。
输入格式:输入第一行给出正整数 n (≤105);第二行给出 n 个整数,绝对值均不超过 100,其间以空格分隔。
输出格式:在第一行中输出连续子序列最大和,第二行输出该子序列首尾的数组下标(从 0 开始),以 1 个空格分隔。若解不唯一,则输出最小的数组下标(如样例所示)。注意:如果序列中所有整数皆为零或负数,则取空子列 ...
算法1-6 计算1-n与1-m每一项相互乘积的和分数 10
作者 陈越
单位 浙江大学
给定两个正整数 n 和 m,请编写程序,求 1n 与 1m 每一项相互乘积的和。
输入格式:输入在一行中给出两个正整数 n 和 m,均不超过 100,其间以空格分隔。
输出格式:在一行中输出题面中要求的值。
输入样例:15 3
输出样例:190
答案1234567891011121314#include <iostream>using namespace std;int main() { int n, m; cin >> n >> m; int sum = 0; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { sum += i * j; } } cout << sum;}
算法1-5 计算1~ n平方的和加上1~n的和分数 10
作者 陈越
单位 浙江大学
给定正整数 n,请编写程序,求 (1+2+⋯+n2)+(1+2+⋯+n) 的值。
输入格式:输入在一行中给出正整数 n(≤100)。
输出格式:在一行中输出题面中要求的值。
输入样例:15
输出样例:1340
答案12345678910111213141516171819#include<iostream>using namespace std;// 计算m到n的和int getSum(int m, int n) { int sum = 0; for (int i = m; i <= n; i++) { sum += i; } return sum;}int main() { int n; cin >> n; int sum = 0; sum += getSum(1, n); sum += getSum(1, n*n); cout << ...
算法1-3~4 将数组中元素反转存放分数 15
作者 陈越
单位 浙江大学
给定 n 个 int 型范围内的整数。请编写程序,将 n 个整数存在数组中,再将这些数组元素反转存放,最后顺序输出反转后数组中的元素。注:虽然不需要改变数组中元素的位置,也可以按反转的顺序输出,但建议练习者尝试反转数组元素的算法。
输入格式:输入第一行给出正整数 n(≤104)。第二行给出 n 个 int 型范围内的整数。同行数字间以空格分隔。
输出格式:在一行中输出反转输入顺序后的结果,每个数字后跟 1 个空格。
输入样例:1251 2 3 4 5
输出样例:15 4 3 2 1
答案1(静态数组)12345678910111213141516171819202122232425#include<iostream>using namespace std;// 反转数组void reverseArray(int *a, int length) { int j = length - 1; for (int i = 0; i < j; i++, j--) { ...
算法1-1~2 求数组与整数乘积的最大值分数 15
作者 陈越
单位 浙江大学
给定 n 个正整数和另一个整数因子 m。请编写程序,将 n 个整数存在数组中,逐一乘以 m,并求所有乘积中的最大值。注:虽然题目要求将输入的 n 个整数存储在数组中,再进行解决,但完全不用数组存储也是可以得到解的。
输入格式:输入第一行给出一对正整数 n(≤104)和 m(≤100)。第二行给出 n 个 [1,103] 区间内的正整数。同行数字间以空格分隔。
输出格式:在一行中输出题面中要求的最大值。
输入样例:125 3123 45 678 9 10
输出样例:12034
答案1234567891011121314151617#include <iostream>using namespace std;int main() { int n, m; cin >> n >> m; // 读取整数因子m和整数个数n int a[n]; // 用数组a存放n个整数 int max = 0; // max变量用来存放数组中的最大值 fo ...
算法0-0 求两个正整数的最大公约数分数 15
作者 陈越
单位 浙江大学
请编写程序,求两个正整数的最大公约数。
输入格式:输入在一行中给出一对正整数 0<x,y≤106,数字间以空格分隔。
输出格式:在一行中输出 x 和 y 的最大公约数。
输入样例:173472 48503
输出样例:1287
答案1234567891011121314151617181920212223#include <iostream>using namespace std;// 欧几里得算法(辗转相除法)求最大公约数int gcd(int m, int n) { // 当b为0时,a就是最大公约数 while (n != 0) { int temp = m % n; // 计算a除以b的余数 m = n; // 把b的值赋给a n = temp; // 把余数赋给b } return m;}int main() { in ...
算法2-8 从单链表 list 中删除第 i 个元素分数 15
作者 陈越
单位 浙江大学
请编写程序,将 n 个整数顺次插入一个初始为空的单链表的表头。随后对任意给定的位序 i,删除链表中第 i 个结点。注意:i 代表位序,从 1 开始。删除结束后,输出链表长度,并顺序输出链表中的每个结点的数值。
输入格式:输入首先在第一行给出正整数 n(≤104);随后一行给出 n 个 int 范围内的整数,数字间以空格分隔;最后一行给出删除位序 i,为 int 范围内的整数。
输出格式:如果删除的位置不合法,则不能删除,在一行中输出句子 错误:删除位置不合法。。无论是否删除成功,都按照题面描述的要求,在一行中输出链表信息,格式为:
1表长: x1 x2 ... xn
注意数字间有 1 个空格分隔,行首尾无多余空格。
输入样例 1:12351 2 3 4 53
输出样例 1:14: 5 4 2 1
输入样例 2:12354 3 6 8 00
输出样例 2:12错误:删除位置不合法。5: 0 8 6 3 4
答案123456789101112131415161718192021222324 ...


