C2第七次作业解题报告

看过题解后如果觉得还算有用,请帮忙加点我所在团队博客访问量

http://www.cnblogs.com/newbe/

http://www.cnblogs.com/newbe/p/4069834.html

http://www.cnblogs.com/newbe/p/4072005.html

求赞求祝福啊!!!

http://www.cnblogs.com/newbe/p/4058097.html

软工老师太狠心,还请可怜一下同课不同命的我们吧~点一下文章末尾的推荐什么的呗,有个回复什么的就更好了!

这次的填空选择居然和第六次一样...简直汗..

1、文件比较

按要求操作即可,由于给定文件本身就是拍好序的,都用不到快排了,

注意这里的字典序略有不同,是在不区分大小写的前提下小写的拍在大写的前面,举个例子:a<B<i<THIS ; this>tHIS>THIS...

误!!!!!尴尬

后来我通知了一下助教...然后他就默默改回正常的字典序了!...汗

所有这成了一道水的不能再水的题了..大家随意切吧..

如果用的是fgets的话注意一下换行符什么的

2、交叉引用生成器

又是题意不清的题..

注意点:

a、单词只接受含有字符和'-'的字符串,其他都是分隔符,同时-p,p-这样的字符串不算单词,要整体性忽略,貌似吧p算作单词的话会wa

b、四个连词要不区分大小写的判断,貌似测试点里面只有首字母大写的case...另外不能用strcmpi函数,因为linux环境下没有这个汗,使用strcasecmp可轻松搞定

然后就是看rp了...

3、内存回收

了解拓扑排序什么的话这就是一道水题..

或者可以参考最短路里面的spfa算法,总之就是用用广搜即可,连好有向边然后搞就好了,存到邻接表或者邻接矩阵都无所谓..因为图大小只有55*55

或许深搜也可以,没试过,比较5s的时限~

4、小数转换为分数

对于有限小数X=0.a1a2…an来说,这个问题比较简单,X就等于(a1a2…an)/10^n。

对于无限循环小数X=0.a1a2…an(b1b2…bm)来说,其复杂部分在于小数点后同时有非循环部分和循环部分,我们可以做如下的转换:

X=0.a1a2…an(b1b2…bm)
=>10^n*X=a1a2…an.(b1b2…bm)
=>10^n*X=a1a2…an+0.(b1b2…bm)
=>X=(a1a2…an+0.(b1b2…bm))/10^n

对于整数部分a1a2…an,不需要做额外处理,只需要把小数部分转化为分数形式再加上这个整数即可。对于后面的无限循环部分,可以采用如下方式

进行处理:

令Y=0.b1b2…bm,那么
10^m*Y=b1b2…bm.(b1b2…bm)
=>10^m*Y=b1b2…bm+0.(b1b2…bm)
=>10^m*Y-Y=b1b2…bm
=>Y=b1b2…bm/(10^m-1)

将Y代入前面的X的等式可得:

X=(a1a2…an+Y)/10^n
=(a1a2…an+b1b2…bm/(10^m-1))/10^n
=((a1a2…an)*(10^m-1)+(b1b2…bm))/((10^m-1)*10^n)

于是用大数搞一下,然后分子分母两边gcd一下就ok了..

主要恶心的地方在于必须使用大数,不然4,7,10这三个点过不去,没用大数的话就别试了,你读入都会爆long long的

5、矩阵乘法C

200s的时限也是给跪了!太神了!

其实还是矩阵,最大能产生的数3000*3000*200000,本以为要用LL,没想到int存就能水过...

由于 m * n < 5000000,所以我把矩阵存在了线性数组里了,然后操作的时候注意一下即可,可能不用线性数组会有问题?不清楚..

注意点:"按整数右对齐方式输出,各列等宽",重点是各列等宽,这时候需要的就是所有矩阵元素的最大位宽而不是每行的最大位宽了。

原文地址:https://www.cnblogs.com/zibaohun/p/4074359.html