PTA23级每日一练精题

7-111 求符合给定条件的整数集

给定不超过6的正整数A,考虑从A开始的连续4个数字。请输出所有由它们组成的无重复数字的3位数。

输入格式:

输入在一行中给出A。

输出格式:

输出满足条件的的3位数,要求从小到大,每行6个整数。整数间以空格分隔,但行末不能有多余空格。

int main()
{
    int a,x,y,z;
    scanf("%d", &a);
    int count = 0;
    
    for (x=a;x<a+4;x++){
        for (y=a;y<a+4;y++){
            for (z=a;z<a+4;z++){
                if (x!=y && x!=z && y!=z) {                 
                        printf("%d%d%d", x, y, z);
                        count++;
                        if ( count%6==0 ) {
                            printf("\n");
                        } else {
                            printf(" ");
                        }                   
                }
                    
            }
        }           
    } 
    return 0; 
}

7-119 阅览室

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

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

输入格式:

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

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

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

输出格式:

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

#include<stdio.h>
int main()
{
    int N, h, m, t, count, id, i, j;
    int arr[1005][2];
    char size;
    scanf("%d", &N);
    for (i = 0; i < N; i++)
    {
        count = 0, t = 0;
        for (j = 0; j < 1005; j++)
        {
            arr[j][0] = 0;
            arr[j][1] = 0;
        }
        scanf("%d %c %d:%d", &id, &size, &h, &m);
        while (id)
        {
            if (size == 'S')
            {
                arr[id][0] = 1;
                arr[id][1] = h * 60 + m;
            }
            else if (size == 'E' && arr[id][0] == 1)
            {
                t += h * 60 + m - arr[id][1];
                arr[id][0] = 0;
                count++;
            }
            scanf("%d %c %d:%d", &id, &size, &h, &m);
        }
        if (count > 1)
            printf("%d %.0lf\n", count, (double)t / count);
        else
            printf("%d %d\n", count, t);
    }
    return 0;
}

7-134 出生年

以上是新浪微博中一奇葩贴:“我出生于1988年,直到25岁才遇到4个数字都不相同的年份。”也就是说,直到2013年才达到“4个数字都不相同”的要求。本题请你根据要求,自动填充“我出生于y年,直到x岁才遇到n个数字都不相同的年份”这句话。

输入格式:

输入在一行中给出出生年份y和目标年份中不同数字的个数n,其中y在[1, 3000]之间,n可以是2、或3、或4。注意不足4位的年份要在前面补零,例如公元1年被认为是0001年,有2个不同的数字0和1。

输出格式:

根据输入,输出x和能达到要求的年份。数字间以1个空格分隔,行首尾不得有多余空格。年份要按4位输出。注意:所谓“n个数字都不相同”是指不同的数字正好是n个。如“2013”被视为满足“4位数字都不同”的条件,但不被视为满足2位或3位数字不同的条件。

# include<stdio.h>
int main()
{
    int m,n,i,j,k,l,ch[4];
    scanf("%d %d",&m,&n);
    for(i=m;i<10000;i++)
    {
        j=1;l=i;
        for(k=0;k<4;k++,l/=10)
        ch[k]=l%10;
        if(ch[0]!=ch[1]&&ch[0]!=ch[2]&&ch[0]!=ch[3])
        j++;
        if(ch[1]!=ch[2]&&ch[1]!=ch[3])
        j++;
        if(ch[2]!=ch[3])
        j++;
        if(j==n)
        break;
    }
    printf("%d %04d",i-m,i);
    return 0;
}
 

7-135 点赞

微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。本题就要求你写个程序,通过统计一个人点赞的纪录,分析这个人的特性。

输入格式:

输入在第一行给出一个正整数N(≤1000),是该用户点赞的博文数量。随后N行,每行给出一篇被其点赞的博文的特性描述,格式为“K F1​⋯FK​”,其中1≤K≤10,Fi​(i=1,⋯,K)是特性标签的编号,我们将所有特性标签从1到1000编号。数字间以空格分隔。

输出格式:

统计所有被点赞的博文中最常出现的那个特性标签,在一行中输出它的编号和出现次数,数字间隔1个空格。如果有并列,则输出编号最大的那个。

#include <stdio.h>
 
int main()
{
    int n,m;//n表示点赞的博文条数,m表示点赞的每条博文对应的标签数。 
    int type[1001] = {0};//统计标签出现次数 
    int t,i;
    scanf("%d",&n);
    while(n > 0)
    {
        scanf("%d",&m);
        while(m > 0)
        {
            scanf("%d",&t);
            type[t] ++;
            m--;
        }
        n --;
    }
    int max = 0,maxid = 0;
    for(i = 1000;i>=0;i--)//找出出现次数最多的标签 
    {
        if(type[i] > max)
        {
            max = type[i];
            maxid = i;
        }
    }
    printf("%d %d",maxid,max);
    return 0;
}

7-136 判断题

判断题的评判很简单,本题就要求你写个简单的程序帮助老师判题并统计学生们判断题的得分。

输入格式:

输入在第一行给出两个不超过 100 的正整数 N 和 M,分别是学生人数和判断题数量。第二行给出 M 个不超过 5 的正整数,是每道题的满分值。第三行给出每道题对应的正确答案,0 代表“非”,1 代表“是”。随后 N 行,每行给出一个学生的解答。数字间均以空格分隔。

输出格式:

按照输入的顺序输出每个学生的得分,每个分数占一行。

#include <stdio.h>
/*提交结果

提交时间    状态    分数    题目    编译器    耗时    用户
2019/10/3 19:29:05    
答案正确
15    1061    C (gcc)    12 ms    569985011
测试点    结果    耗时    内存
0    答案正确    8 ms    296 KB
1    答案正确    4 ms    280 KB
2    答案正确    12 ms    228 KB
3    答案正确    4 ms    228 KB
*/
int main(){
    int N,M;
    scanf("%d%d",&N,&M);
    int Score[101];//每道题的分值
    for (int i=0;i<M;i++)scanf("%d",&Score[i]);
    int TrueAnswer[101];//每道题的正确选项
    for (int i=0;i<M;i++)scanf("%d",&TrueAnswer[i]); 
    int temp;//学生给出的答案 
    int HisScore;//该名学生截至目前得分 
    for (int i=0;i<N;i++){
        HisScore=0; 
        for (int j=0;j<M;j++){
            scanf("%d",&temp);
             if(temp==TrueAnswer[j]){
                 HisScore+=Score[j];
             }
        }
        printf("%d\n",HisScore);
    }
}


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值