当前位置: 首页 > news >正文

2024/2/23 考试

第一题

One Clue

问题陈述

在数轴上有20000012000001块石头,这些石头的坐标分别为-1000000, -999999, -999998, \ldots, 999999, 1000000−1000000,−999999,−999998,…,999999,1000000。

其中,连续的KK块石头被涂成了黑色,其余的则是白色的。

此外,我们知道位于坐标XX的那块石头是黑色的。

请按升序打印所有可能含有黑色石头的坐标。

约束条件

  • 1 \leq K \leq 1001≤K≤100
  • 0 \leq X \leq 1000≤X≤100
  • 输入中的所有值均为整数。

输入

输入从标准输入中以如下格式给出:

K X

输出

按升序打印所有可能含有黑色石头的坐标,坐标之间用空格隔开。


示例输入 1

3 7

Copy

示例输出 1

5 6 7 8 9

Copy

我们知道有三块连续的黑色石头,并且坐标为77的石头是黑色的。有三种可能性:

  • 黑色石头分别位于坐标55、66和77。
  • 黑色石头分别位于坐标66、77和88。
  • 黑色石头分别位于坐标77、88和99。

因此,可能含有黑色石头的五个坐标为:55、66、77、88和99。


示例输入 2

4 0

Copy

示例输出 2

-3 -2 -1 0 1 2 3

Copy

负坐标也可能包含黑色石头。


示例输入 3

1 100

Copy

示例输出 3

100

这道题其实就是考虑 x-(k-1)一次缩小了1

加上x加上x+ (k+1)每次增大一到k减一

,代码如下,

#include<bits/stdc++.h>
using namespace std;
int n,a;
int main(){
//    freopen("loop.in","r",stdin);
//    freopen("loop.out","w",stdout);
cin>>n>>a;
if(n==1)
{
    cout<<a;
    return 0;
}
for(int i=n-1;i>=1;i--)
{
    cout<<a-i<<" ";
}
cout<<a<<" ";
for(int i=1;i<=n-1;i++)
{
    cout<<a+i<<" ";
}
    return 0;
}

第二题

B. Shift

问题描述

给定一个长度为NN的序列A = (A_1, A_2, \dots, A_N)A=(A1​,A2​,…,AN​)。

你将执行以下操作KK次:

  • 删除AA的初始元素并在AA的尾部添加一个00。

打印所有操作后的AA的元素。

约束

  • 1 \leq N \leq 1001≤N≤100

  • 1 \leq K \leq 1001≤K≤100

  • 1 \leq A_i \leq 1001≤Ai​≤100

  • 输入中的所有值都是整数。


输入

从标准输入以以下格式给出输入:

NN KK

A_1A1​ A_2A2​ \dots… A_NAN​

输出

在一行中打印操作后的AA的元素,用空格分隔。


样例输入1

3 2

2 7 8

样例输出1

8 0 0

在进行操作之前,A = (2, 7, 8)A=(2,7,8)。

进行一次操作后,A = (7, 8, 0)A=(7,8,0)。

进行两次操作后,A = (8, 0, 0)A=(8,0,0)。

因此,(8, 0, 0)(8,0,0)是答案。


样例输入2

3 4

9 9 9

样例输出2

0 0 0


样例输入3

9 5

1 2 3 4 5 6 7 8 9

样例输出3

6 7 8 9 0 0 0 0 0

这道题在考试中用了我很大时间,我在考试中把这道题想的太复杂了,其实只需要一个一个的去。

嗯模拟就行。但是我的思路则是用这种个值。减去从第几个值开始,从这个值开始往后输出就再输出n个零。

考试中的代码如下

#include<bits/stdc++.h>
using namespace std;
int n,a,b[110],a1,a2;
int main(){
//    freopen("loop.in","r",stdin);
//    freopen("loop.out","w",stdout);
cin>>n>>a;
for(int i=1;i<=n;i++)
{
    cin>>b[i];
}
if(a>=n)
{
    for(int i=1;i<n;i++)
    {
        cout<<"0"<<" ";
    }
    cout<<"0";
    return 0;
}
a1=n-a;
for(int i=a+1;i<=n;i++)
{
    cout<<b[i]<<" ";
}
for(int i=1;i<=a;i++)
{
    cout<<"0"<<" ";
}
    return 0;
}

第三题。

Bovine Bones

题目描述

Bessie 喜欢玩棋盘游戏和角色扮演游戏,因此她让 John 带她去了一家小店买了三个骰子。这三个骰子分别有 S1S1、S2S2 和 S3S3 面。每面的数字是 11 到骰子的面数,每个数字出现的概率相等。Bessie 想要知道在所有可能的骰子组合中,哪个三个骰子点数之和出现得最频繁。如果多个和出现的频率相同,报告最小的那个和。

数据范围
  • 2 \leq s_1 \leq 202≤s1​≤20
  • 2 \leq s_2 \leq 202≤s2​≤20
  • 2 \leq s_3 \leq 402≤s3​≤40
输入格式

第一行包含三个用空格分隔的整数:S1S1、S2S2 和 S3S3。

输出格式

输出一行,包含那个出现最频繁的最小整数和。

示例

样例输入 #1
3 2 3

Copy

样例输出 #1
5

Copy

提示

以下是所有可能的结果:

1 1 1 -> 3  
1 2 1 -> 4  
2 1 1 -> 4  
2 2 1 -> 5  
3 1 1 -> 5  
3 2 1 -> 6 
1 1 2 -> 4  
1 2 2 -> 5  
2 1 2 -> 5  
2 2 2 -> 6  
3 1 2 -> 6  
3 2 2 -> 7 
1 1 3 -> 5  
1 2 3 -> 6  
2 1 3 -> 6  
2 2 3 -> 7  
3 1 3 -> 7  
3 2 3 -> 8

这道题其实就是用三重for循环。

就能解决。

考试中的代码如下

#include<bits/stdc++.h>
using namespace std;
int n,m,s,a[110000],maxx=-999999;
int main(){
//    freopen("loop.in","r",stdin);
//    freopen("loop.out","w",stdout);
cin>>n>>m>>s;
for(int i=1;i<=n;i++)
{
    for(int j=1;j<=m;j++)
    {
        for(int k=1;k<=s;k++)
        {
//        cout<<i<<" "<<j<<" "<<k<<" "<<endl;
    a[i+j+k]++;
        }
    }
}
for(int i=1;i<=n;i++)
{
    for(int j=1;j<=m;j++)
    {
        for(int k=1;k<=s;k++)
        {
            if(a[i+j+k]>maxx)
            maxx=a[i+j+k];
        }
    }
}
for(int i=1;i<=n;i++)
{
    for(int j=1;j<=m;j++)
    {
        for(int k=1;k<=s;k++)
        {
            if(a[i+j+k]==maxx)
            {
            cout<<i+j+k;
            return 0;    
            }
        }
    }
}
    return 0;

第四题。

Glass and Mug

问题陈述

AtCoder公司销售玻璃杯和马克杯。

高桥有一个容量为GG毫升的玻璃杯和一个容量为MM毫升的马克杯,满足G<MG<M。

最初,玻璃杯和马克杯都是空的。在执行以下操作KK次之后,确定玻璃杯和马克杯中分别含有多少毫升的水。

  • 如果玻璃杯装满了水(即玻璃杯恰好含有GG毫升的水),则将玻璃杯中的水全部倒掉。
  • 否则,如果马克杯是空的,则给马克杯加满水。
  • 否则,从马克杯向玻璃杯转移水,直到马克杯为空或玻璃杯被装满为止。

约束条件

  • 1\leq K\leq 1001≤K≤100
  • 1\leq G<M\leq 10001≤G<M≤1000
  • GG、MM和KK均为整数。

输入

输入从标准输入中以如下格式给出:

KK GG MM

输出

在执行操作KK次后,按顺序打印玻璃杯和马克杯中含有的水量(以毫升为单位),中间用空格隔开。


示例输入 1

5 300 500

Copy

示例输出 1

200 500

Copy

操作将按照以下步骤进行。最初,玻璃杯和马克杯都是空的。

  • 给马克杯加满水。此时,玻璃杯有00毫升,马克杯有500500毫升的水。
  • 将水从马克杯转移到玻璃杯,直到玻璃杯被填满。此时,玻璃杯有300300毫升,马克杯有200200毫升的水。
  • 将玻璃杯中的水全部倒掉。此时,玻璃杯有00毫升,马克杯有200200毫升的水。
  • 将水从马克杯转移到玻璃杯,直到马克杯为空。此时,玻璃杯有200200毫升,马克杯有00毫升的水。
  • 给马克杯加满水。此时,玻璃杯有200200毫升,马克杯有500500毫升的水。

因此,在五次操作后,玻璃杯中有200200毫升,马克杯中有500500毫升的水。故应依次打印200200和500500,中间用空格隔开。


示例输入 2

5 100 200

Copy

示例输出 2

0 0

这道题题目其实就是让我们按照这个要求去走。但是需要特判一个条件。

如果

马克杯给玻璃杯倒水,玻璃杯满,那马克杯就不能倒了。

如果马克杯dow没了,玻璃杯还没满。那我马克杯还得再装。

代码如下

#include<bits/stdc++.h>
using namespace std;
int n,m,s,a,b,maxx=-999999;
int main(){
//    freopen("loop.in","r",stdin);a  pole
//    freopen("loop.out","w",stdout);b  mak
cin>>n>>m>>s;
for(int i=1;i<=n;i++)
{
if(a==m)
{
    a=0;
    }    
else if(b==0)
{
    b=s;
}
else
{
    if(a+b>=m)
    {
    b=b-(m-a);
        a=m;
    }
    else
    {
        a+=b;
        b=0;
    }
}
}
cout<<a<<" "<<b;
    return 0;

相关文章:

  • js中的await与async的使用
  • react使用拖拽,缩放组件,采用react-rnd解决
  • instanceof和typeof的区别【JavaScript常见面试题】
  • 跨境宠物摄像头是一种专为宠物主人设计的智能设备
  • OpenCV计算摄影学(1)图像修复(Inpainting)的函数inpaint()
  • 【若依框架】代码生成详细教程,15分钟搭建Springboot+Vue3前后端分离项目,基于Mysql8数据库和Redis5,管理后台前端基于Vue3和Element Plus,开发小程序数据后台
  • P5304 [GXOI/GZOI2019] 旅行者
  • 嵌入式项目:STM32刷卡指纹智能门禁系统
  • ShardingSphere--02--数据分片
  • 基于嵌入式linux的数据库:SQLite
  • 分片机制如何理解?
  • Unity Shader 学习13:屏幕后处理 - 使用高斯模糊的Bloom辉光效果
  • 统计学中的得分函数(Score Function)是什么?它和Fisher信息矩阵有什么关系?
  • Golang笔记——Interface类型
  • JavaScript获取DOM元素语法总结(getElementsByName()、querySelector()、querySelectorAll())
  • 网络安全漏洞管理要求 网络安全产品漏洞
  • OC高级编程之GCD
  • C语言数据结构—二叉树的链式结构实现
  • 【ECMAScript6】
  • 【知识】PyTorch中不同优化器的特点和使用
  • 财政部:鼓励政策性银行对符合条件的城市更新项目提供支持
  • 欧洲加大力度招募美国科研人员
  • 达恩当选罗马尼亚总统
  • 新冠阳性率升高,专家:新冠变异株致病力没太多变化
  • 520、521婚登预约迎高峰?上海民政:将增派力量,新人可现场办理
  • 十大券商看后市|A股指数有望进一步缓步推高,淡化短期波动