前沿
转载需要注明出处,本文不得用于售卖,任何人均可免费获取。
如果您觉得本文帮到了您,可以点击上方支持按钮或者文末打赏按钮来打赏作者。
ps: 打赏行为与打赏金额请自愿,不影响使用本文来复习,且已有的资料全部都在博客上公开。
您的支持是博客前进的动力,仅此而已!!!
一,读程序
阅读下列程序,写出答案
// 1
#include <iostream>
using namespace std;
void function(char *& s1, char *& s2){
int i = 0;
for(; *s1 != *s2; s1++, s2++) i++;
*(s1-1) = '\0';
*(s2-1) = '\0';
cout << i << endl;
}
int main(){
char str1[] = "Hello Nanjing";
char str2[] = "I am liang";
char *p1 = str1, *p2 = str2;
function(p1, p2);
cout << p1 << endl;
cout << p2 << endl;
return 0;
}
// 2.
#include <iostream>
using namespace std;
class Person{
public:
Person(){num++;}
~Person(){num--;}
static int num;
};
int Person::num = 0;
class Baby:public Person{
public:
Baby(){num++;}
~Baby(){num--;}
static int num;
}
int Baby::num = 0;
int num = 100;
Person p1;
int main(){
int num = 0;
cout << num << "," << ::num << "," << Person::num << "," << Baby::num << endl;
{
Person p2;
Baby b1;
cout << Person::num << "," << Baby::num << endl;
}
cout << Person::num << "," << Baby::num << endl;
return 0;
}
// 3.
#include <iostream>
using namespace std;
int main(){
int n = 14;
for(int = 0; i < n; i++){
if(i%6==0) continue;
cout << i << ' ';
if(i==6) break;
}
return 0;
}
// 4.
#include <iostream>
#include <stdexcept>
using namespace std;
class Myerror: public runtime_error{
public:
Myerror():runtime_error{"my error"}{
}
};
int main(){
try{
int i = 10;
if (i % 5 == 0){
throw Myerror();
}
}catch(Myerror &err){
cout << err.what() << endl;
}
return 0;
}
二、写程序
1、算法
该题目选自力扣[剑指 Offer II 100. 三角形中最小路径之和] [1]
给定一个三角形 triangle ,找出自顶向下的最小路径和。
每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1 。
输入:triangle = [[2],[3,4],[6,5,7],[4,1,8,3]]
输出:11
解释:如下面简图所示:
2
3 4
6 5 7
4 1 8 3
自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。
2、库
请对我上面读程序的第2题进行扩写,请为一个人增加一些参数以及方法。同时要求重载部分运算操作符,请自行发挥。
三、程序填空
/*
题目要求:
实现一个进制加密算法,比如 十进制954的十六进制3BA。
我们对3BA进行加密,3BA -> 4CB -> BC4
要求随机产生一个数字(0-2048),并且对其进行加密,请输出加密前十六进制和加密后的字符串
比如:
产生随机数:954
输出格式:
3BA -> AC4
*/
#include <iostream>
#include <string>
【1】
string toHEX(int num){
string s;
if(num == 0){
【5】
}
while(num != 0){
int d = num % 16;
char ch = '\0';
if(【2】){
ch = char(d + '0');
}else{
【3】
ch = char(d + 'A');
}
s = ch + s;
【4】
}
return s;
}
void encryption(char *p){
if(【6】){
return;
}
【7】
if(*p <= 'Z' && *p >= 'A')
cout << char(【8】);
else cout << char(【9】);
}
int main(){
int num = rand()%(2049);
string src = toHEX(954);
const char *str = src.c_str();
int len = src.length();
cout << str << " -> ";
encryption(【10】);
return 0;
}
引用
[1] 剑指 Offer II 100. 三角形中最小路径之和, https://leetcode.cn/problems/IlPe0q/