[NWPU][2018暑假作业][通用版]一、热身 [Cloned]

A - The 3n + 1 problem

题目要求输出:输入的两个值、两个值中特定算法的最大周期长度。最大周期长度比较好算,一个函数递归就能解决,然后题上有一个小坑(算是坑吧),就是输入的m和n的值并没有保证m<n。考虑到了这个就没有问题了。

B - Candy Sharing Game

直接重新定义一个和N一样长的数组,然后把每个人糖果的一半数量存进去,原数组的值都减半,再加上新定义的数组的值,也就是说原本数组的第i+1个值减半再加上新定义的数组的第i个值,就是一轮获得的糖,然后再考虑是奇数个老师给一个糖。递归。

C - Edge

这道题读懂题意就好,就是顺时针逆时针移动的坐标转换,分情况讨论即可。

D - 不容易系列之(3)―― LELE的RPG难题

刚一看感觉还是个递推函数的问题,但是上手写起来感觉好像推导公式的话会比递推好写,并且公式也并不是很难。
我先列出了根节点值为1的二叉树,结点的左孩子和右孩子分别是它的下一个格子可能对应的颜色(先不管不能和根节点重复的问题)。
然后根据层数判断发现,第i层1的数量是第i-1层非1的数量(画图可以看出),把每一层1的数量存入数组中。
计算可能的情况个数,就是计算第n层结点的总数减去第n层结点值为1的数量。
同理,根节点为2和3时情况类似。

E - A + B

水题。注意可能输入1+1=, 1+11=, 11+1=, 11+11=四种情况即可。

F - Robot Motion

水题……分情况讨论即可。

G - 请使用sort

用一个结构体把球队的名字、总得分、净胜球、总进球表示出来,然后用sort函数对结构体进行降序排序。比较函数根据总得分、净胜球、总进球、名字的顺序依次返回true和flase。(sort真好用 PS:记得格式啊!!!最后一行还得输出一个回车!!

H - 请使用sort

sort函数真的方便啊,很快就弄出来了。
一共有M个元素,选出满意值最大的K个,然后按降序输出这K个的编号即可。PS:进入第二个测例之前记得清空。

I - 辗转相除法求最大公约数

搞清楚辗转相除法的概念就可以了……先用辗转相除法求出两个数的最大公约数,然后用这两个数的乘积除以最大公约数得到最大公倍数,用这个最大公倍数和第三个数继续计算即可。

J - Ignatius and the Princess IV

因为可能输入的N值很大……于是我在全局定义了一个动态数组指针,每输入一组数据开一次空间,结束再把它释放掉,就可以直接在快排函数里调用了。刚开始想在全局直接定义一个a[100000000]来着……但是这样肯定会出问题,全局数组定义的太大了。

K - next_permutation

这个题目……只要知道有next_permutation(a, a+n)这个函数就很简单了。a代表数组名称,n代表需要全排列的长度。每进行一次这个函数,全排列就往后一个。

L - Delta-wave

刚开始想直接模拟……但是后来发现对于差距比较大的数字复杂度太高了……然后就找规律,发现三角形三条边三个方向,计算每个方向的距离相加即可。PS:记得以后一定要加上while(~scanf)。

M - 枚举答案能不能做?

一打开这个题,数字根,ok,以前做过,复制粘贴上去 WA……
然后突然想到了数字可能很大……超过long long范围的那种……后来我发现知乎上面有一个很神奇的结论:9加上任何正整数所得的和的数字根,等于原来数字的数字根。于是完美解决……
那篇知乎文章→点击打开链接

N - Bullseye

水题……没啥好写的……

O - Dirichlet's Theorem on Arithmetic Progressions

刚开始全局定义了一个int数组来判定是否是素数,但是结果完全不对……之后改定义成bool就ok了。每次判断素数直接查表(发现C++确实有好多实用的函数。

P - Reduced ID Numbers

本题要求用取模的方法简化数字过大的SIN,输入的几组SIN值在取模后的值不相等即可。每组数据输入G个SIN值,则除数必须大于等于G才能保证取模后的值互不相等(必要条件)

Q - 高精度(大数)n次方

n次方之后的数据有可能超过数据的存储范围,所以只能用数组/链表来存储。方便起见选择数组来存储它,数组的每个位置分别存储一个个位数,当这个位置的数大于等于10时,采用取模的方法留下个位数,十位上的数直接进到上一位。计算n次方时用n-1次方的值乘以输入的数字。因为整数位和小数位的计数方法相同,所以把整数位和小数位合并,在输出到某个地方的时候输出小数点即可。

R - Joseph

想模拟这个过程,但是发现又超时了orz,然后只能改进了一下方法,直接计算去掉的结点的位置,然后判断是否去掉了好人。如果去掉的是后k位,继续删除,如果去掉的是前k位,m值改变。一共删除k个结点之后,如果没有前k位被删除,则此时m值就是对应k所求。

U - Long Distance Racing

水题。每输入一个Si的时候把来回时间都加上,注意时间和距离不超过要求即可。

V - The Fun Number System

从最低位往高位开始计算结果是1还是0,类似十进制转换二进制。p为正,n为负。PS:不是题目要求尽量不要用字符串输出,容易WA……

W - The Circumference of the Circle

题目倒是不难,很容易就能推出来公式,R=abc/4*sqrt(p(p-a)(p-b)(p-c))。但是这道题令我感到很迷茫的是,我用math.h头文件的时候,测例都过了,但提交始终是WA,之后改成cmath就过了……大概是用math.h的时候会有精度损失?

X - Specialized Four-Digit Numbers

水题。直接写三个函数分别是十进制十二进制十六进制的时候位数相加,如果相等就输出。

Y - A == B ?

输入的数可能非常大,有可能输入的数字带有小数,小数点后全是0.比如1.000和1是相等的,1.000和1.00也相等。分是否输入有小数点讨论是否相等。

Z - A + B Problem II

大数加法。每个数组的每个位置存储的值都小于3位数,可以先按顺序做加法,加法结束之后再把大于10的数字做取模和取余处理。用a[max]和b[max]存储输入的两个数字,用c[max+1]存储做加法之后的数字,c从最后一位开始存储,不断往前加。类似加法先加个位再加十位。

猜你喜欢

转载自blog.csdn.net/qq_40560275/article/details/80988490
今日推荐