作业三
|
https://edu.cnblogs.com/campus/zswxy/CST2020-3/ | |
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2020-3/homework/11454 | |
| 这个作业的目标 | 掌握新的循环语言 | |
| 学号 | 20209009 |
1.PTA实验作业
1.1 求平方根序列前N项和
—— 题目内容描述:计算平方根序列√1+√2+√3+⋯的前N项之和。可包含头文件math.h,并调用sqrt函数求平方根。
1.1.1实验代码截图

1.1.2数据处理
利用循环语句不断累加
1.1.3 PTA提交列表及说明

1.2 求简单交错序列前N项和
—— 题目内容描述: 计算序列 1 - 1/4 + 1/7 - 1/10 + ... 的前N项之和。
1.2.1 实验代码截图

1.2.2 数据处理
使用了简单的for语句进行循环
1.2.3 PTA提交列表及说明


1.3 求分数序列前N项和
—— 题目内容描述:计算序列 2/1+3/2+5/3+8/5+... 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。
1.3.1 实验代码截图

1.3.2 数据处理
利用了sum变量
1.3.3 PTA提交列表及说明


2.阅读代码
题目要求:找一份优秀代码,理解代码功能,并讲出你所选代码有点及可以学习的地方
代码如下:
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#include<vector>#include<queue>#include<map>#include<set>#include<time.h>#include<string>#define cl(a,b) memset(a,b,sizeof(a))#define max(x,y) ((x)>(y)?(x):(y))#define min(x,y) ((x)<(y)?(x):(y))#define REP(i,n) for(int i=0;i<n;++i)#define REP1(i,a,b) for(int i=a;i<=b;++i)#define REP2(i,a,b) for(int i=a;i>=b;--i)#define MP make_pair#define LL long long#define ULL unsigned long long#define X first#define Y second#define MAXN 100050using namespace std;int p,b,n;struct node{ int a,id;}q[MAXN];bool cmp(node a,node b){ return a.a<b.a||(a.a==b.a&&a.id<b.id);}int qmod(int a,int b,int c){ int res=1; while(b) { if(b&1) res=((LL)res*a)%c; a=((LL)a*a)%c; b>>=1; } return res;}int main(){ while(scanf("%d%d%d",&p,&b,&n)!=EOF){ int m=sqrt(p*1.0); while(m*m<p)m++; int res=1; int tail=0; int a=qmod(b,m,p); for(int i=0;i<=m;++i) { q[tail].id=i; q[tail++].a=res; res=((LL)res*b)%p; } sort(q,q+tail,cmp); int h=0; for(int i=0;i<tail;++i) { if(i==0||q[i].a!=q[i-1].a) { q[h++]=q[i]; } } int flag=0,ans; res=n; int ra=qmod(a,p-2,p); for(int i=0;i<=m;++i) { int l=0,r=h-1; while(r-l>1) { int mid=(l+r)>>1; if(q[mid].a>res)r=mid; else l=mid; } int pos=-1; if(q[l].a==res)pos=l; if(q[r].a==res)pos=r; if(pos!=-1){ ans=i*m+q[pos].id; flag=1; break; } res=((LL)res*ra)%p; } if(flag==0)puts("no solution"); else printf("%d\n",ans); }}总结:
1.利用了大量的循环语句和条件语句相互配合
2.思路清晰,简洁明了
3.学习总结
3.1 学习进度条
| 周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 | |
| 11.2-11.8 | 21h | 156 |
|
数列的组合与应用 |
3.3 学习感悟
1.仿佛可以看到一个软件的生成的内部结构慢慢在我面前展开,展现出代码的魅力
2.语言的相通性

浙公网安备 33010602011771号