强训day2

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: 强训day2

 目录

一.选择题

二.编程题


一.选择题

1.[单选题]十进制变量i的值为100,那么八进制的变量i的值为()

A 146       B 148       C 144      D 142

解析:

这道题很简单,将十进制转换为八进制,将100商8,将所有余数按顺序排列就是了。

答案就是C

2.[单选题]执行下面语句后的输出为()

int I=1;

if(I<=0)

       printf("****\n") ;

else

       printf("%%%%\n");

A %%      B ****      C 有语法错,不能正确执行     D %%%%

解析:

这里主要考察的是格式化串。

对于printf,它是格式是printf(格式化串,参数1,参数2,......)

格式化串:printf第一个参数只会的参数要按照指定的格式打印

比如:%d——>按照整型方式打印

          %f——>按照float方式打印

......格式化串有一定的规定:%之后跟上C语言特点的字符才能表示一定的格式化,如果不是特点的,比如%Q,那么在打印的时候,%视为无效,直接打印Q。

回到题目中,我们需要执行的语句是printf("%%%%\n"),这也是个特殊情况,两个%打印一个%,所以答案是A。

3.[单选题]对于下面的C语言声明描述正确的一项是()

char (*p)[16]

A     p是长度为16的字符指针数组

B     p是包含16个字符的字符串

C    p是指向长度为16的字符数组的指针

D    p是长度为16的字符数组

解析:

因为p与*号结合了,所以p是一个指针,不是数组,代表着该指针指向的是长度为16的数组。

没有结合,p才是数组,比如说是:char *p[16],代表p是一个指针数组。

所以,答案选C

4.[单选题]数组a的定义语句为“float a[3][4];”,下列()是对数组元素不正确的引用方法

A a[i][j]      B *(a[i]+j)      C *(*(a+i)+j)      D *(a+i*4+j)

解析:

这道题考察的是对二维数组的理解。

对于一个二维数组a[i][j],我们可以看作是i个一位数组,长度是j。

在访问一维数组的时候,是a[i]这样写的,而且a[i]==*(a+i);

所以,对于访问二维数组:

①a[i][j]     ②*(a[i]+j):意思是先在a[i]行找第j列,然后解引用

③*(*(a+i)+j):这个跟②是一样的。④这个不行,因为a+i*4,如果i==1,就是a+4+j,然后解引用,算的是行数,而且可能会越界。

答案是D

5.[单选题]下面程序的输出结果是__________。

#include < iostream.h>

#define SQR(A) A*A

void main()

{

       int x=6,y=3,z=2;

       x/=SQR(y+z)/SQR(y+z);

       cout< < x< < endl;

}

A 5    B 6    C 1    D 0

解析:

这道题考察的是宏。

运算的过程如下:

ZJ6)0P$T_RZ07WZPO8BPJS6.png

所以答案是D

6.[单选题]当n=5时,下列函数的返回值是()

int foo(int n)

{

       if(n<2)

       {

               return n;

       }

       else

               return 2*foo(n-1)+foo(n-2);

}

A 5      B 11      C 29      D 10

解析:

这道题是对递归的理解。使用递归去做运算即可;

YL(4K3FT185E9]{D1IS[1AL.png

7.[单选题]以下对C语言的”指针“描述不正确的是()

A   32位系统下任何类型指针的长度都是4个字节

B   指针的数据类型声明的是指针实际指向内容的数据类型

C   野指针是指向未分配或者已释放的内存地址

D   当使用free释放掉一个指针内容后,指针变量的值被置为NULL

解析:

在64系统下,指针是8个字节,32系统是4个字节

指针的数据类型,比如int* a,a的内容就是int类型的

C选项考察的是野指针的定义

D的话,当free掉后,指针变量的内容没有被置为NULL,而是指针失去了这个地址,需要主动去置空。如果不置空,就会变成野指针。

防止野指针:①free后置空   ②不要越界访问   ③创建指针的时候进行初始化

所以选D;

8.[单选题]数组定义为”int a[4][5];”, 引用”*(a+1)+2″表示()(从第0行开始)

A   a[1][0]+2

B   a数组第1行第2列元素的地址

C   a[0][1]+2

D   a数组第1行第2列元素的值

解析:

这个跟第四题类型。

对于*(a+1)+2,首先(a+1)拿到的是这个二维数组第1行的地址,然后*(a+1)是对其进行解引用,拿到的是第1行的内容,然后是*(a+1)+2,它表示的是a数组第一行第二列那个元素的地址,因为没有解引用。

所以选B;

9.[单选题]有一个如下的结构体:

struct A{

       long a1;

       short a2;

       int a3;

       int *a4;

};

请问在64位编译器下用sizeof(struct A)计算出的大小是多少()

A 24    B 28    C 16    D 18

解析:

这里考察的是结构体内存对齐规则:

J_{_NFED1{DF17GP4EFV[5V.png

10.[单选题]运行结果是()

#include <iostream>

using namespace std;

int f(int n)

{

       if (n==1)

               return 1;

       else

               return (f(n-1)+n*n*n);

}

int main()

{

       int s=f(3);

       cout<<s<<endl;

       return 0;

}

A 8    B 9    C 27    D 36

解析:

这里考察的也是递归的理解和运行,f(3)= f(2)+3*3*3;f(2)=f(1)+2*2*2;f(1)=1;f(3)=1+2*2*2+3*3*3=36,因此答案选D

二.编程题

1.题目:不要二

题目描述:二货小易有一个W*H的网格盒子,网格的行编号为0~H-1,网格的列编号为0~W-1。每个格子至多可以放一块蛋糕,任意两块蛋糕的欧几里得距离不能 等于2。 对于两个格子坐标(x1,y1),(x2,y2)的欧几里得距离为: ( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) 的算术平方根 小易想知道最多可以放多少块蛋糕在网格盒子里。

输入描述:每组数组包含网格长宽W,H,用空格分割.(1 ≤ W、H ≤ 1000)

输出描述:输出一个最多可以放的蛋糕数

示例1:输入:3 2   输出:4

分析:

对于知道题,我们可以从两个格子坐标的欧几里得距离入手:因为两个各种的欧几里得距离不能等于2,相对于是两个坐标直接的距离的平方不能为4,所以可以写出:

(x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) = 4 ,接着我们分析出,

在整数中4是由0+4 = 4,4+0=4,2+2=4,1+3=4,3+1=4这五种加法得出。

在这五种当中,只有0+4和4+0成立,其它三种不成立。为啥?

对于3+1:没有一个数(整型int)的平方(x1-x2) * (x1-x2)可以等于3,只能1*1,2*2 ...所以这个加法不行,同理2+2,1+3也如此。

得出这个结论后,我们对0+4和4+0进行分析:

对于0+4:即x1-x2 = 0,y1-y2=2,所以是x1=x2,y1=2+y2

对于4+0:即x1-x2=2,y1-y2=0,所以是x1=2+x2,y1=y2

也就是说,当我们在a[i][j]这个位置放置了蛋糕后,a[i][j+2]和a[i+2][j]这两个位置不能放了!

得出最终结论后,我们先创建一个二维数组,然后将其初始化为1.然后开始遍历,如果是1,然后将它对应的两个位置置为0,一直遍历到结束,每次进行计数便可。

代码如下:

int main()
{
  int w, h, cnt = 0;
  cin >> w >> h;
  vector<vector<int>> a;
  a.resize(w);//行数
  for (auto& e : a)
  {
    e.resize(h, 1);//列数
  }
  for (int i = 0; i < w; i++)
  {
    for (int j = 0; j < h; j++)
    {
      if (a[i][j] == 1)
      {
        cnt++;
        if ((i + 2) < w)
        {
          a[i + 2][j] = 0;
        }
        if ((j + 2) < h)
        {
          a[i][j + 2] = 0;
        }
      }
    }
  }
  cout << cnt << endl;
  return 0;
}

image.gif

2.题目:把字符串转换成整数

题目描述:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为 0 或者字符串不是一个合法的数值则返回 0。数据范围:字符串长度满足   0<=n<=100

注意: ①字符串中可能出现任意符号,出现除 +/- 以外符号时直接输出 0 ②字符串中可能出现 +/- 且仅可能出现在字符串首位。

输入描述:输入一个字符串,包括数字字母符号,可以为空

输出描述:如果是合法的数值表达则返回该数字,否则返回0

示例1:

输入:

+2147483647

1a33

输出:

2147483647

0

分析:

解题思路非常简单,就是上次计算的结果*10,相当于10进制进位,然后加当前位的值。

例如:

“123”转换的结果是

sum=0

sum*10+1->1

sum*10+2->12

sum*10+3->123

本题的关键是要处理几个关键边界条件:

1. 空字符串

2. 正负号处理

3. 数字串中存在非法字符

代码如下:

class Solution {
public:
  int StrToInt(string str)
  {
    if (str.empty())
      return 0;
    int symbol = 1;
    if (str[0] == '-') //处理负号
    {
      symbol = -1;
      str[0] = '0'; //这里是字符'0',不是0
    } e
      lse if (str[0] == '+') //处理正号
    {
      symbol = 1;
      str[0] = '0';
    } i
      nt sum = 0;
    for (int i = 0; i < str.size(); ++i)
    {
      if (str[i] < '0' || str[i] > '9')
      {
        sum = 0;
        break;
      } s
        um = sum * 10 + str[i] - '0';
    } r
      eturn symbol* sum;
  }
};

image.gif


相关文章
|
JavaScript
js: 获取标签元素data-*属性值的方法
js: 获取标签元素data-*属性值的方法
306 0
|
8月前
|
数据采集 数据可视化 小程序
vue3+echarts可视化——记录我的2023编程之旅
vue3+echarts可视化——记录我的2023编程之旅
121 1
|
机器学习/深度学习 自然语言处理 算法
GPT、BERT、XLM、GPT-2、BART…你都掌握了吗?一文总结文本生成必备经典模型(1)
GPT、BERT、XLM、GPT-2、BART…你都掌握了吗?一文总结文本生成必备经典模型
775 0
|
存储 自然语言处理 算法
语法设计——基于LL(1)文法的预测分析表法
语法设计——基于LL(1)文法的预测分析表法
313 0
语法设计——基于LL(1)文法的预测分析表法
|
网络协议
Qt-网络与通信-TCP版本聊天程序
Qt-网络与通信-TCP版本聊天程序
141 0
Qt-网络与通信-TCP版本聊天程序
|
网络安全 数据安全/隐私保护 Windows
|
14天前
|
供应链 监控 安全
对话|企业如何构建更完善的容器供应链安全防护体系
阿里云与企业共筑容器供应链安全
171330 12
|
16天前
|
供应链 监控 安全
对话|企业如何构建更完善的容器供应链安全防护体系
随着云计算和DevOps的兴起,容器技术和自动化在软件开发中扮演着愈发重要的角色,但也带来了新的安全挑战。阿里云针对这些挑战,组织了一场关于云上安全的深度访谈,邀请了内部专家穆寰、匡大虎和黄竹刚,深入探讨了容器安全与软件供应链安全的关系,分析了当前的安全隐患及应对策略,并介绍了阿里云提供的安全解决方案,包括容器镜像服务ACR、容器服务ACK、网格服务ASM等,旨在帮助企业构建涵盖整个软件开发生命周期的安全防护体系。通过加强基础设施安全性、技术创新以及倡导协同安全理念,阿里云致力于与客户共同建设更加安全可靠的软件供应链环境。
150295 32
|
24天前
|
弹性计算 人工智能 安全
对话 | ECS如何构筑企业上云的第一道安全防线
随着中小企业加速上云,数据泄露、网络攻击等安全威胁日益严重。阿里云推出深度访谈栏目,汇聚产品技术专家,探讨云上安全问题及应对策略。首期节目聚焦ECS安全性,提出三道防线:数据安全、网络安全和身份认证与权限管理,确保用户在云端的数据主权和业务稳定。此外,阿里云还推出了“ECS 99套餐”,以高性价比提供全面的安全保障,帮助中小企业安全上云。
201960 14
对话 | ECS如何构筑企业上云的第一道安全防线
|
2天前
|
机器学习/深度学习 自然语言处理 PyTorch
深入剖析Transformer架构中的多头注意力机制
多头注意力机制(Multi-Head Attention)是Transformer模型中的核心组件,通过并行运行多个独立的注意力机制,捕捉输入序列中不同子空间的语义关联。每个“头”独立处理Query、Key和Value矩阵,经过缩放点积注意力运算后,所有头的输出被拼接并通过线性层融合,最终生成更全面的表示。多头注意力不仅增强了模型对复杂依赖关系的理解,还在自然语言处理任务如机器翻译和阅读理解中表现出色。通过多头自注意力机制,模型在同一序列内部进行多角度的注意力计算,进一步提升了表达能力和泛化性能。