作业03
这个作业属于哪个课程 | https://home.cnblogs.com/u/Qutongxue/relation/schoolclasses |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2020-3/homework/11454 |
这个作业的目标 | 提高自己的编程能力学会从不同角度去解决问题,尽可能找到问题最优解 |
学号 | 20209016 |
一。PTA实验作业。
1.1.1实验2-2-3 计算存款利息 (10分)
本题目要求计算存款利息,计算公式为interest=money×(1+rate)
year
−money,其中interest为存款到期时的利息(税前),money是存款金额,year是存期,rate是年利率。
输入格式:
输入在一行中顺序给出三个正实数money、year和rate,以空格分隔。
输出格式:
在一行中按“interest = 利息”的格式输出,其中利息保留两位小数。
1.1.2数据处理
使用了pow函数,定义了interest,money,rate等变量。其中部分为整数,部分为浮点数,要分开定义变量。重新定义了一个函数
1.1.3 PTA提交列表及说明
将方程式转换成合适的格式出了点小问题,调试总是不对,后面查了数发现我没有用pow函数,调试了以后发现一遍过了。
2.1.1
本题要求编写程序,计算平方根序列√
1
+√
2
+√
3
+⋯的前N项之和。可包含头文件math.h,并调用sqrt函数求平方根。
2.2.2数据处理
使用了变量 i,n,s,item等浮点型变量,而且使用了for循环结构,item表示每一项,而sum表示求和。运用了for结构,循环结构,初值表达式,条件表达式,步长表达式
2.2.3PTA提交列表及说明
因为第一题中接触过函数的使用,而且当时还顺带查了查sqrt这么使用,再加上云班课里面作业做过类似的,所以说这个题目我调试了一遍就过了,调试之前我还细心的反复坚持了几次,确保格式没有错误才敢提交的。
3.3.17-1 求简单交错序列前N项和 (15分)
本题要求编写程序,计算序列 1 - 1/4 + 1/7 - 1/10 + ... 的前N项之和。
3.3.2数据处理
用了整型变量N,i,flag,N是题目要求的输入变量,i是用在for语句里面的变量,利用flag变量的值直接定义。
数据处理:用for循环,流程结构为循环结构。
3.3.3PTA提交列表及说明
题目要求的输出格式不对,导致老是出错,而且格式经常出错。
2.阅读优秀代码
include<time.h>
include
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 100050
using 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);
}
}
这个代码让我学习到了很多优秀的循环结构及其语法,比如if结构和for语句。而且他让我对语句有了更加清晰的认识
3。学习总结
3.1学习进度条
第八周,8h 54行 学会hello word等简单但比较基础的算法
第九周 9h 123行 学会了scanf函数等的使用。
第十周 15h 277行 学会for循环语句的使用
3.3 学习感悟
对于刚入门的新手来说打好一段代码难的不是原理而是一些微小的细节,一些格式,我往往会发现我不是不会代码的和新原理而是忽略了一些微小却重要的格式。所以说打好一段代码并不容易,要时刻关注方方面面微小的小细节。不过,这更加让我坚定了我的想法。