(1)最多三次购买股票的机会,每次买入之前需要保证手上没有其他股票,买卖可以在同一天完成,求最大的收益;
输入:
3,8,5,1,2,7,3,8表示每天股票的价格
cpp
#include <iostream>
#include <vector>
#include <string>
#include <cmath>
using namespace std;
int main() {
string str;
while (getline(cin, str)) {
// 3,8,5,1,2,7,3,8
int len = str.size();
vector<int> prices;
int t = 0;
for (int i = 0; i < len; i++) {
if (isdigit(str[i])) {
t = t*10 + (str[i]-'0');
} else if (str[i] == ',') {
prices.push_back(t);
t = 0;
}
}
prices.push_back(t);
int n = prices.size();
// dp表示每天的状态
// 0 ===> 没有任何买卖股票的记录
// 1 ===> 第一次买入股票
// 2 ===> 第一次卖出购票
// 3 ===> 第二次买入股票
// 4 ===> 第二次卖出股票
// 5 ===> 第三次买入股票
// 6 ===> 第三次卖出股票
vector<vector<int>> dp(n, vector<int>(7));
dp[0][0] = 0;
dp[0][1] = -prices[0];
dp[0][2] = 0;
dp[0][3] = -prices[0];
dp[0][4] = 0;
dp[0][5] = -prices[0];
dp[0][6] = 0;
for (int i = 1; i < n; i++) {
// 当天没有任何买卖股票,这里好像应该是0?
for (int j = 0; j < 7; j++)
dp[i][0] = max(dp[i][0], dp[i-1][j]);
// 该天第一次买入
dp[i][1] = -prices[i];
// 该天第一次卖出,从前往后找第一次买入时+当前价格
for (int j = 0; j <= i; j++)
dp[i][2] = max(dp[i][2], dp[j][1]+prices[i]);
// 该天第二次买入,从前往后找第一次卖出时-当前价格
for (int j = 0; j <= i; j++)
dp[i][3] = max(dp[i][3], dp[j][2]-prices[i]);
// 该天第二次卖出,从前往后找第二次买入时+当前价格
for (int j = 0; j <= i; j++)
dp[i][4] = max(dp[i][4], dp[j][3]+prices[i]);
// 该天第三次买入,从前往后找第二次卖出时+当前价格
for (int j = 0; j <= i; j++)
dp[i][5] = max(dp[i][5], dp[j][4]-prices[i]);
// 该天第三次卖出,从前往后找第三次买入时+当前价格
for (int j = 0; j <= i; j++)
dp[i][6] = max(dp[i][6], dp[j][5]+prices[i]);
}
int max_sum = 0;
// 找到完成三次买卖中的最大值
for (int i = 0; i < n; i++) {
max_sum = max(max_sum, dp[i][6]);
}
cout << max_sum << endl;
}
}
(2)输出自然数n以内的所有质数的和的平方根,保留四位小数。
cpp
bool check(int n) {
for (int i = 2; i <= int(sqrt(n)); i++) {
if (n%i == 0) {
return false;
}
}
return true;
}
int main() {
int n;
while (cin >> n) {
int sum = 0;
for (int i = 2; i < n; i++) {
if (check(i)) {
sum += i;
}
}
printf("%.4f", sqrt(sum));
}
}
(3)找出id='1001'的客户在11月份和12月份的总的消费数目
在线数据库测试:DB Fiddle - SQL Database Playground (db-fiddle.com)
sql
drop table if exists AccoInfo;
CREATE TABLE `AccoInfo` (
`id` varchar(10) NOT NULL,
`name` varchar(10) NOT NULL,
`balance` int NOT NULL,
PRIMARY KEY (`id`)
);
insert into AccoInfo(id, name, balance) values
('1001','hundsun', 100),
('1002','hundsun', 100);
drop table if exists AccoCurrent_202211;
CREATE TABLE `AccoCurrent_202211` (
`id` varchar(10) NOT NULL,
`amount` int NOT NULL,
`time` varchar(11) NOT NULL
);
insert into AccoCurrent_202211 values
('1001', 100, '20221101'),
('1001', 200, '20221102'),
('1002', 100, '20221101'),
('1002', 200, '20221102');
drop table if exists AccoCurrent_202212;
CREATE TABLE `AccoCurrent_202212` (
`id` varchar(10) NOT NULL,
`amount` int NOT NULL,
`time` varchar(11) NOT NULL
);
insert into AccoCurrent_202212 values
('1001', 100, '20221201'),
('1001', 200, '20221202'),
('1002', 100, '20221201'),
('1002', 200, '20221202');
sql
SELECT id, SUM(amount) AS 'sum(amount)'
FROM (
SELECT id, amount FROM AccoCurrent_202211
UNION ALL
SELECT id, amount FROM AccoCurrent_202212
) combined
WHERE id = '1001';
(4)从下面表中找出没有用户欠款记录的客户名和用户名称
sql
CREATE TABLE `cust_info` (
`NO` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '客户号',
`NAME` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '姓名',
`ID` varchar(18) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '身份证号',
`BIRTH` int DEFAULT NULL COMMENT '出生年月',
`COUNTRY` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '国籍'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
INSERT INTO cust_info (`NO`, NAME, ID, BIRTH, COUNTRY) VALUES('001', '张三', '330111XXXXX1', 19900101, '中国');
INSERT INTO cust_info (`NO`, NAME, ID, BIRTH, COUNTRY) VALUES('002', '李四', '330111XXXXX2', 20000201, '中国');
INSERT INTO cust_info (`NO`, NAME, ID, BIRTH, COUNTRY) VALUES('003', '王五', '330111XXXXX3', 20000301, '中国');
INSERT INTO cust_info (`NO`, NAME, ID, BIRTH, COUNTRY) VALUES('004', '赵六', '330111XXXXX4', 19930401, '美国');
CREATE TABLE `cust_assets` (
`NO` varchar(100) DEFAULT NULL COMMENT '客户号',
`DEPOSIT` decimal(10,2) DEFAULT NULL COMMENT '存款金额',
`CREDIT` decimal(10,2) DEFAULT NULL COMMENT '信用卡金额'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
INSERT INTO cust_assets (`NO`, DEPOSIT, CREDIT) VALUES('001', 10001.0, -100.0);
INSERT INTO cust_assets (`NO`, DEPOSIT, CREDIT) VALUES('002', 1000.0, -2000.0);
INSERT INTO cust_assets (`NO`, DEPOSIT, CREDIT) VALUES('003', 0.0, -5000.0);
sql
SELECT ci.NO, ci.NAME
FROM cust_info ci
LEFT JOIN cust_assets ca ON ca.NO = ci.NO
WHERE ca.CREDIT is NULL;
(5)从下面表中选出工人平均成绩大于85的工人的名称和平均成绩
sql
DROP TABLE IF EXISTS Employee;
CREATE TABLE Employee (
Eno int NOT NULL,
Ename varchar(255) DEFAULT NULL,
Esex varchar(255) NOT NULL,
Eage int DEFAULT NULL,
Edept varchar(255) DEFAULT NULL,
PRIMARY KEY (Eno)
);
INSERT INTO Employee VALUES ('1', '张三', '男', '32', '部门A');
INSERT INTO Employee VALUES ('2', '李四', '男', '26', '部门B');
INSERT INTO Employee VALUES ('3', '王五', '男', '28', '部门A');
INSERT INTO Employee VALUES ('4', '赵七', '男', '29', '部门A');
INSERT INTO Employee VALUES ('5', '周六', '女', '30', '部门C');
DROP TABLE IF EXISTS Course;
CREATE TABLE Course (
CNo varchar(255) NOT NULL,
Cname varchar(255) DEFAULT NULL,
Ccredit int DEFAULT NULL,
PRIMARY KEY (CNo)
);
INSERT INTO Course VALUES ('001', '数据库', '10');
INSERT INTO Course VALUES ('002', '计算机基础', '10');
INSERT INTO Course VALUES ('003', '金融基础', '20');
INSERT INTO Course VALUES ('004', '投资基础', '10');
DROP TABLE IF EXISTS SC;
CREATE TABLE SC (
Eno int NOT NULL,
CNo varchar(255) DEFAULT NULL,
Grade int DEFAULT NULL, PRIMARY KEY (Eno)
) ;
INSERT INTO SC VALUES ('1', '001', '60');
INSERT INTO SC VALUES ('2', '001', '80');
INSERT INTO SC VALUES ('3', '001', '86');
INSERT INTO SC VALUES ('4', '001', '88');
INSERT INTO SC VALUES ('5', '001', '86');
sql
SELECT E.Ename, AVG(SC.Grade) AS AverageGrade
FROM Employee E
JOIN SC ON E.Eno = SC.Eno
GROUP BY E.Eno, E.Ename
HAVING AVG(SC.Grade) > 85;
(6)事务隔离级别