ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2021-05-16刷题

2021-05-16 20:33:30  阅读:157  来源: 互联网

标签:long 16 int 测试数据 Sample 2021 Output Input 刷题


目录

A - 百步穿杨

时维九月,序属三秋,辽军大举进攻MCA山,战场上两军正交锋.辽军统帅是名噪一时的耶律-James,而MCA方则是派出了传统武将中草药123.双方经过协商,约定在十一月八日正午十分进行射箭对攻战.中草药123早早就开始准备,但是他是武将而不是铁匠,造弓箭的活就交给聪明能干的你了,现在告诉你每种弓箭规格,即箭身的长度,以及每种规格弓箭所需要的数目,要求你把需要的弓箭都输出.
弓箭的基本样子为 “>±–+>”,其中"±–+"为箭身,数据保证箭身长度 > 2

Input
首先输入一个t,表示有t组数据,跟着t行:
第i行两个整数Ai , Bi,分别代表需要箭身长度为Ai的弓箭Bi枝. (Ai < 30 , Bi < 10 )

Output
按照每组数据需要的箭身的依次输出所有需要的弓箭,每根弓箭占一行.

Sample Input

4

3 4

4 5

5 6

6 7

Sample Output

±+>
±+>
±+>
±+>
±-+>
±-+>
±-+>
±-+>
±-+>
±–+>
±–+>
±–+>
±–+>
±–+>
±–+>
±—+>
±—+>
±—+>
±—+>
±—+>
±—+>
±—+>

#include<bits/stdc++.h>
#define ll  long long
using namespace std;

int main()
{
    int t;
    while(~scanf("%d",&t))
    {
        int a,b;
        while(t--)
        {
            scanf("%d %d",&a,&b);
            for(int i=1;i<=b;i++)
            {
                printf(">+");
                for(int i=1;i<=a-2;i++)
                {
                    printf("-");
                }
                printf("+>\n");
            }
        }
    }
    return 0;
}

B - 三角形

已知一个质地均匀的三角形厚平板以一条边为底,立放在某桌面上,侧面图示如下:
在这里插入图片描述

桌面的左边是无限长的,桌面的水平线被视为x轴。
三角形的三个顶点坐标为(x1,0) (x2,0) (x3,h)
桌边的坐标为(d, 0)

请问该三角形是否会掉下桌子(可能三角形放置在桌子外,见样例2)
Input
第1行,整数T表示有T组测试数据。
接下共T组测试数据,对于每组测试数据:
第1行,包括5个整数,x1, x2, x3, h, d, (0 < x1, x2, x3, h, d <= 1000)

Output
对于每组测试数据:
第1行,如果三角形会掉下去,则输出JiaoZhuV5!
否则输出Orz!

Sample Input

2
1 3 2 5 10

10 30 20 50 1

Sample Output

Orz!

JiaoZhuV5!

首先先判断x1和d的大小,如果x1>d,那么就直接在掉下去了;如果x1<d,那么判断三角形的重心坐标与d比较。

#include<bits/stdc++.h>
#define ll  long long
using namespace std;

int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        double x1,x2,x3,h,d;
        cin>>x1>>x2>>x3>>h>>d;
        if(x1>=d)//先判断三角形是不是直接被放置在桌子外边
        {
            printf("JiaoZhuV5!\n");
        }
        else
        {
            double num=(x1+x2+x3)/3.0;//求三角形的重心坐标
            if(num<=d)
                printf("Orz!\n");
            else
                printf("JiaoZhuV5!\n");
        }
    }
    return 0;
}

C - 壮志难酬

话说MCA山上各路豪杰均出山抗敌,去年曾在江湖威名显赫的,江湖人称<万军中取上将首级舍我其谁>的甘露也不甘示弱,“天将降大任于斯人也,必先劳其筋骨,饿其体肤,空乏其身”他说。可惜,由于去年取上将首级时不慎右手右关节第七次骨折,养伤达一年之久,空有一腔抱负却壮志难酬,如今天下危亡,习武之人又怎能袖手旁观,于是他决定出山协助威士忌共抗辽贼,这时他的对头枫冰叶子出现,两人都是水属性,但由于十年前的一场恩怨(这是后话)势成水火。
枫冰叶子要求甘露回答一个问题,否则不让他离开,可惜甘露绞尽脑汁未果,希望你来帮他解决,助他完成大业。
问题是这样的:给你一个小数x,让你算出小数点后第n位是什么,(1 <= n <= 6)

Input
首先输入一个t,表示有t组数据,跟着t行:
每行输入一个小数(输入数据保证一定是a.b的形式,为了简单化问题,没有循环小数的情况)
然后跟一个n,表示小数点后第几位

Output
输出一个数表示小数点后第n位的数(1 <= n <= 6)

Sample Input

3

1.234 1

2.345 2

3.456 3

Sample Output

2
4
6

首先我是使用字符串类型处理的,但是因为少考虑了temp+num>=str.length(),我们要知道小数后边的零食可以省略的。
后面我又改了使用double类型的处理,本来浮点型的数据是自己会四舍五入的,所以就出现了自己四舍五入的情况。就比如3.456要输出小数点后第三个数,我先是通过求pow(10,3)*3.456再求余10,结果3.456变成了3.4559了。

#include<bits/stdc++.h>
#define ll  long long
using namespace std;

string str;
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int num;
        cin>>str;
        scanf("%d",&num);
        int temp;
        for(int i=0;i<str.length();i++)
        {
            if(str[i]=='.')
            {
                temp=i;
                break;
            }
        }
        if(temp+num>=str.length())//这种情况很容易忽略
            cout<<'0'<<endl;
        else
            cout<<str[temp+num]<<endl;
    }
    return 0;
}

D - 勤能补拙

有道是:“勤能补拙,熟能生巧;细节决定成败,态度决定一切,现象决定本质,现在决定未来;婚姻是游戏的围墙,女人最麻烦了。”
对于“勤能补拙”,也有说是一个人的 总能力值 = 99%的勤奋值 + 1%的天赋

Input
对于每组测试数据:
第一行,输入两个整数,X,Y(0 <= X,Y <= 100)表示一个人的勤奋值与天赋

处理到文件结束
Output
对于每组测试数据:
第一行,输出总能力值,保留二位小数。

Sample Input

100 100

40 50

Sample Output

100.00
40.10

#include<bits/stdc++.h>
#define ll  long long
using namespace std;

int main()
{
    double x,y;
    while(cin>>x>>y)
    {
        printf("%.2lf\n",x*0.99+y*0.01);
    }
    return 0;
}

E - 熟能生巧

有道是:“勤能补拙,熟能生巧;细节决定成败,态度决定一切,现象决定本质,现在决定未来;婚姻是游戏的围墙,女人最麻烦了。”
对于“熟能生巧”,魔方大家都玩过吧?
常见的魔方,每边上有3个小正方体,如下图所示
在这里插入图片描述

我们把魔方每边上的小正方体数量叫魔方的“阶”
所以,常见的魔方叫“3阶魔方”。
不过,魔方可不是只有3阶的,
还有2、4、5……阶的呢,如下图所示:
在这里插入图片描述

观察所有的魔方,你会发现,
我们可以把魔方表面上的小正方体分为三类:
第一类:有三个面露在外面的;
第二类:有两个面露在外面的;
第三类:有一个面露在外面的。
当然,
这三类小正方体的数量
会随着魔方阶的不同而不同。
你的任务就是计算一下,
  对于给定阶数的魔方,
   这三类小正方体分别有多少个。

Input
对于每组测试数据:
第一行,一个整数n,表示魔方的阶数,已知 2 <= n <= 1000。

处理到文件结束
Output
对于每组测试数据:
有三行,每行一个整数,分别表示对于该魔方,第一类、第二类、第三类的小正方体的数量。

Sample Input

3

Sample Output

8
12
6

哈哈!作为一个理解能力比较差的孩子,刚开始没有看懂题目的意思。

#include<bits/stdc++.h>
#define ll  long long
using namespace std;

int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        printf("8\n");//这个不管是几阶,都是8
        int sum=(n-2)*4*2+4*(n-2);//将每个角角去掉
        int temp=(n-2)*(n-2)*6;//去掉角角,然后有6个面
        printf("%d\n%d\n",sum,temp);
    }
    return 0;
}

F - 火车上的人数

火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上、下车,但上、下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a人。
从第3站起(包括第3站)上、下车的人数有一定规律:上车的人数都是前两站上车人数之和,而下车人数等于上一站上车人数,一直到终点站的前一站(第n-1站),都满足此规律。
现给出的条件是:共有N个车站,始发站上车的人数为a,最后一站下车的人数是m(全部下车)。
试问x站开出时车上的人数是多少?
Input
有多组测试数据。
每组测试数据仅包含一行,每行包括四个整数,a,n,m和x。
0<= a <= 10
3<= n <= 30
1 <= x < n
0 <= m <= 2^31-1
Output
对于每组测试数据,输出一行,包括一个整数,即从x站开出时车上的人数。
Sample Input

5 7 32 4

Sample Output

13

一开始就觉得和求斐不拉契数列好像

#include<bits/stdc++.h>
#define ll  long long
using namespace std;

int bus[1005];
int up[1005],down[1005];
int main()
{
    int a,n,m,x;
    while(~scanf("%d %d %d %d",&a,&n,&m,&x))
    {
        bus[1]=bus[2]=a;
        up[1]=a,down[1]=0;
        for(int i=0;;i++)//这里是列举第二个站上车下车人数
        {
            up[2]=i;
            down[2]=i;
            for(int j=3;j<n;j++)
            {
                up[j]=up[j-2]+up[j-1];
                down[j]=up[j-1];
                bus[j]=bus[j-1]+up[j]-down[j];
            }
        if(bus[n-1]==m)//这里需要判断一下,因为如果不相等,那就没有解
        {
            cout<<bus[x]<<endl;
            break;
        }
        }
    }
    return 0;
}

G - 谁拿了最多奖学金

某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种,获取的条件各自不同:

  1. 院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可获得;
    
  2. 五四奖学金,每人4000元,期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)的学生均可获得;
    
  3. 成绩优秀奖,每人2000元,期末平均成绩高于90分(>90)的学生均可获得;
    
  4. 西部奖学金,每人1000元,期末平均成绩高于85分(>85)的西部省份学生均可获得;
    
  5. 班级贡献奖,每人850元,班级评议成绩高于80分(>80)的学生干部均可获得;
    

只要符合条件就可以得奖,每项奖学金的获奖人数没有限制,每名学生也可以同时获得多项奖学金。例如姚林的期末平均成绩是87分,班级评议成绩82分,同时他还是一位学生干部,那么他可以同时获得五四奖学金和班级贡献奖,奖金总数是4850元。

现在给出若干学生的相关数据,请计算哪些同学获得的奖金总数最高(假设总有同学能满足获得奖学金的条件)。
Input
有多组测试数据,对于每组测试数据:
第一行是一个整数N(1 <= N <= 100),表示学生的总数。
接下来的N行每行是一位学生的数据,从左向右依次是姓名,期末平均成绩,班级评议成绩,是否是学生干部,是否是西部省份学生,以及发表的论文数。
姓名是由大小写英文字母组成的长度不超过20的字符串(不含空格);期末平均成绩和班级评议成绩都是0到100之间的整数(包括0和100);是否是学生干部和是否是西部省份学生分别用一个字符表示,Y表示是,N表示不是;发表的论文数是0到10的整数(包括0和10)。每两个相邻数据项之间用一个空格分隔。
Output
对于每组测试数据,共输出三行,第一行是获得最多奖金的学生的姓名,第二行是这名学生获得的奖金总数。
如果有两位或两位以上的学生获得的奖金最多,输出他们之中在输入文件中出现最早的学生的姓名。第三行是这N个学生获得的奖学金的总数。
Sample Input

4

YaoLin 87 82 Y N 0

ChenRuiyi 88 78 N Y 1

LiXin 92 88 N N 0

ZhangQin 83 87 Y N 1

Sample Output

ChenRuiyi

9000

28700

但凡是涉及到属性中包括字符串的,我一般都会使用结构体或者map,进行排序。

#include<bits/stdc++.h>
#define ll  long long
using namespace std;

string name[105];
int last;
int grade;
string dept;
string west;
int num;
int main()
{
    int n;
    map<string,int>str;
    while(~scanf("%d",&n))
    {
        int max_sum=0;
        for(int i=1;i<=n;i++)
        {
            int sum=0;
            cin>>name[i]>>last>>grade>>dept>>west>>num;
            if(last>80&&num>=1)
                sum+=8000;
            if(last>85&&grade>80)
                sum+=4000;
            if(last>90)
                sum+=2000;
            if(last>85&&west=="Y")
                sum+=1000;
            if(grade>80&&dept=="Y")
                sum+=850;
            max_sum+=sum;
            str[name[i]]=sum;
        }
        int max1=-1;
        string s;
        for(int i=1;i<n;i++)
        {
            if(str[name[i]]>max1)//不可以等于
            {
                max1=str[name[i]];
                s=name[i];//记录下标
            }
        }
        cout<<s<<endl;
        cout<<str[s]<<endl;
        cout<<max_sum<<endl;
    }
    return 0;
}

*H - 过河

在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上有一些石子,青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:0,1,……,L(其中L是桥的长度)。坐标为0的点表示桥的起点,坐标为L的点表示桥的终点。青蛙从桥的起点开始,不停的向终点方向跳跃。一次跳跃的距离是S到T之间的任意正整数(包括S,T)。当青蛙跳到或跳过坐标为L的点时,就算青蛙已经跳出了独木桥。

题目给出独木桥的长度L,青蛙跳跃的距离范围S,T,桥上石子的位置。你的任务是确定青蛙要想过河,最少需要踩到的石子数。
Input
有多组测试数据,对于每组测试数据:
第一行有一个正整数L(1 <= L <= 10^9),表示独木桥的长度。第二行有三个正整数S,T,M,分别表示青蛙一次跳跃的最小距离,最大距离,及桥上石子的个数,其中1 <= S <= T <= 10,1 <= M <= 100。第三行有M个不同的正整数分别表示这M个石子在数轴上的位置(数据保证桥的起点和终点处没有石子)。所有相邻的整数之间用一个空格隔开。
Output
对于每组测试数据,仅输出一行,包括一个整数,表示青蛙过河最少需要踩到的石子数。
Sample Input

10

2 3 5

2 3 5 6 7

Sample Output

2

在这里插入代码片

*I - 乘积最大

今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年。在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得以参加。活动中,主持人给所有参加活动的选手出了这样一道题目:
设有一个长度为N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积能够为最大。
同时,为了帮助选手能够正确理解题意,主持人还举了如下的一个例子:
有一个数字串:312, 当N=3,K=1时会有以下两种分法:
1) 312=36
2) 31
2=62
这时,符合题目要求的结果是:31*2=62
现在,请你帮助你的好朋友XZ设计一个程序,求得正确的答案。
Input
有多组测试数据。
对于每组测试数据有两行:
第一行共有2个自然数N,K(6≤N≤40,1≤K≤6)
第二行是一个长度为N的数字串。
Output
对于每组测试数据,输出一行,为所求得的最大乘积(一个自然数)。
Sample Input

4 2

1231

Sample Output

62

在这里插入代码片

注:标有*是没有做出来的

标签:long,16,int,测试数据,Sample,2021,Output,Input,刷题
来源: https://blog.csdn.net/mengmengde_/article/details/116901769

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有