3.18PTA打卡

题目L1-043

天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时,管理员输入书号并按下S键,程序开始计时;当读者还书时,管理员输入书号并按下E键,程序结束计时。书号为不超过1000的正整数。当管理员将0作为书号输入时,表示一天工作结束,你的程序应输出当天的读者借书次数和平均阅读时间。

注意:由于线路偶尔会有故障,可能出现不完整的纪录,即只有S没有E,或者只有E没有S的纪录,系统应能自动忽略这种无效纪录。另外,题目保证书号是书的唯一标识,同一本书在任何时间区间内只可能被一位读者借阅。

输入格式:

输入在第一行给出一个正整数N(≤10),随后给出N天的纪录。每天的纪录由若干次借阅操作组成,每次操作占一行,格式为:

书号([1, 1000]内的整数) 键值SE) 发生时间hh:mm,其中hh是[0,23]内的整数,mm是[0, 59]内整数)

每一天的纪录保证按时间递增的顺序给出。

输出格式:

对每天的纪录,在一行中输出当天的读者借书次数和平均阅读时间(以分钟为单位的精确到个位的整数时间)。

(已修改,成功AC)

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
int main()
{
    int n;
    int p=0;
    int timer[1001]={0},timer2[1001]={0};
    int f[1001]={0},e[1001]={0},h[1001]={0};
    cin>>n;
    int sum=0,count=0;
    int a,c,d,t,min,hour;
    char b;
    int i;
    for(i=0;;i++)
    {
        scanf("%d %c %d:%d",&a,&b,&c,&d);
        if(a!=0&&b=='S')
        {
            timer[a]=c;timer2[a]=d;
            h[a]=1;
        }
        else if(a!=0&&b=='E'&&h[a]!=0)
        {
            count++;
            min=d-timer2[a];
            hour=abs(c-timer[a]);
            t=hour*60+min;
            sum=sum+t;
            timer[a]=0;timer2[a]=0;
            h[a]=0;
        }
        if(a==0)
        {
            f[p]=count;
            e[p++]=sum;
            sum=0;
            count=0;
            memset(h,0,sizeof(h));
        }
        if(p==n)
        {
            break;
        }
    }
    for(i=0;i<n;i++)
    {
        if(f[i]!=0)
        {
            float m=(float)e[i]/f[i]+0.5;
            e[i]=(int)m;
        }
        printf("%d %d\n",f[i],e[i]);
    }
}

L1-048题目: 

给定两个矩阵A和B,要求你计算它们的乘积矩阵AB。需要注意的是,只有规模匹配的矩阵才可以相乘。即若A有Ra​行、Ca​列,B有Rb​行、Cb​列,则只有Ca​与Rb​相等时,两个矩阵才能相乘。

输入格式:

输入先后给出两个矩阵A和B。对于每个矩阵,首先在一行中给出其行数R和列数C,随后R行,每行给出C个整数,以1个空格分隔,且行首尾没有多余的空格。输入保证两个矩阵的R和C都是正数,并且所有整数的绝对值不超过100。

输出格式:

若输入的两个矩阵的规模是匹配的,则按照输入的格式输出乘积矩阵AB,否则输出Error: Ca != Rb,其中Ca是A的列数,Rb是B的行数。

#include<stdio.h>
int main()
{
    int Ra,Ca,Rb,Cb,i,j,sum,t;
    t=0;
    scanf("%d%d",&Ra,&Ca);
    int a[Ra][Ca];
    for(i=0;i<Ra;i++)
    {
        for(j=0;j<Ca;j++)
        {
            scanf("%d", &a[i][j]);
        }
    }
    scanf("%d%d",&Rb,&Cb);
    int b[Rb][Cb];
    for(i=0;i<Rb;i++)
    {
        for(j=0;j<Cb;j++)
        {
            scanf("%d",&b[i][j]);
        }
    }
    if(Ca!=Rb)
        printf("Error: %d != %d\n",Ca,Rb);
    else
    {
        int c[Ra][Cb];
        for(i=0;i<Ra;i++)
        {
            
            for(t=0;t<Cb;t++)
            {
			    sum=0;
                for(j=0;j<Ca;j++)
                {
                    sum=sum+a[i][j]*b[j][t];
                }
                c[i][t]=sum;
            }
         }
         printf("%d %d\n",Ra,Cb);
         for(i=0;i<Ra;i++)
         {
             for(j=0;j<Cb;j++)
             {
                 if(j==Cb-1)
                     printf("%d",c[i][j]);
                 else
                     printf("%d ",c[i][j]);
             }
             printf("\n");
         }
    }
    return 0;
}

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值