C语言I博客作业02

这个作业属于哪个课程 <班级的链接>
这个作业要求在哪里 <作业要求的链接>
这个作业的目标 <学习不同的使用不同的代码求解>
学号 <20208924>

1.PTA实验作业(15分/题)

从PTA题目集中选出3个你最满意的题目完成以下内容,选择题目难度越大,分值越高,每题2分,内容要求如下:

1.1计算火车运行时间

题目内容:输入在一行中给出2个4位正整数,其间以空格分隔,分别表示火车的出发时间和到达时间。每个时间的格式为2位小时数(00-23)和2位分钟数(00-59),假设出发和到达在同一天内。

1.1.1实验代码截图

1.1.2数据处理

数据表达:用了x,y,a,b为变量,值是通过定义的函数,整数型。
数据处理:表达式有if-else,循环结构和顺序结构。

1.1.3 PTA提交列表及说明


Q1:为什么答案错误。
A1:没有考虑小于一个小时的情况。
Q2:怎么表示时间的代码?
A2:简单用数学方法计算时间。

1.2 阶梯电价

题目内容:为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦时;超过50千瓦时的,超出部分的用电量,电价上调0.05元/千瓦时。请编写程序计算电费

1.2.1实验代码截图

1.2.2 数据处理

数据表达:用c为变量,借用已有数据,float类型。
数据处理:表达式有if-else,循环结构和顺序结构。

1.2.3 PTA提交列表及说明


Q1:是一开始不知道输出的规则?
A1:对
Q2:为什么还是错了?
A2:少算了当电费小于零的情况

1.3 题目2求奇数分之一序列前N项和

题目内容:计算序列 1 + 1/3 + 1/5 + ... 的前N项之和。

1.3.1 实验代码截图

1.3.2 数据处理

数据表达:用了a,b,i,n,item,sum为变量,借用已有数据和自己测的数据,整数型和浮点型。
数据处理:表达式for循环结构。

1.3.3 PTA提交列表及说明


Q1:第一次错误的原因?
A1:没有注重细节,计算sum的算式中没有*1.0。
Q2:这样运用for循环结构?
A2:要有表达式1,表达式2,表达式3,才能正常的运行。

2.阅读代码(-5——5分)

#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 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);
    }
 
}   

1.对于这段代码的理解:确定空间坐标系的位置。
2.这段代码运用:while-for语句、if-else语句、分支语句,有循环结构和基础数据类型,指定次数的循环程序设计,运用了算数运算和赋值运算。
3.学习的地方:运用数学知识与计算机的知识两者相互融合,这样能够帮助我写程序,我也发现到他们对待格式的要求是非常严格的,我也应该学这种对待代码的好习惯。

3.学习总结(15分)

3.1 学习进度条(5分)

周/日期 这周所花的时间 代码行 学到的知识点简介 目前比较迷惑的问题
第八周 34 432 初步了解了C++什么,干什么的 以后能干什么
第九周 47 633 学会了C语言的基本数据类型 有很多的代码不能理解什么含义
第十周 65 1323 学会了for语句 已经了解了C语言的1%,还需要慢慢去练习

3.2 累积代码行和博客字数(5分)

3.3 学习感悟(5分)

学会了for语句,对于代码的理解多了几分,可以用不同的方法去解同样的题,我在学习中不断理解代码的含义,不断累积经验,为以后的学习打好扎实的基础,希望以后能在这个方向有建树。

posted on 2020-11-08 03:30  春风去故人归  阅读(338)  评论(1)    收藏  举报

导航