ZISUOJ 高级语言程序设计实训-基础C(部分题)

news2024/11/18 15:52:09

说明:

        有几个题是不会讲的,我只能保证大家拿保底分。

题目列表:

fcaaa896e3ad4a6c9195e530572734a9.png

问题 A: 求平均数1 

3b4b3a663863450188ef61372e399263.png 

思路:

        送分题……

参考题解:

#include <iostream>
#include <iomanip>
using std::cin;
using std::cout;

int main(){
	cin.tie(nullptr)->sync_with_stdio(false);
	double avg = 0;
	int tmp,cnt = 0;
	while(cin >> tmp){
		avg+=tmp,cnt++;
	}
	cout << std::fixed << std::setprecision(2) << avg/cnt << std::endl;
	return 0;
} 

问题 B: 粘墙三角形 

12f5df494d344207a1a99cf2b312fab3.png

 思路:

        题目说<=26,那就很简单了,写个二重循环秒了。

参考题解:

#include <iostream>
using std::cin;
using std::cout;

int main(){
	cin.tie(nullptr)->sync_with_stdio(false);
	int n;
	while(cin >> n){
		for(int i = 1;i<=n;i++){
			cout << 'a';
			for(int j = 1;j<=n-i;j++) cout << ' ';
			for(int j = 1;j<=i;j++) cout << char('a'+j-1);
			cout << '\n';
		}
		cout << '\n';
	}
	return 0;
} 

 问题 C: 门帘设计

807090d235ee4eba9c272c97f090b2d3.png 

思路:

        注意这里的输出中间都是有空格的。门帘的上面是对2取模为1的输出字符,否则输出空格;门帘的下面是对4取模为1的输出字符,否则输出空格。

参考题解:

#include <iostream>
using std::cin;
using std::cout;

int main(){
	cin.tie(nullptr)->sync_with_stdio(false);
	char c;int a,b;
	while(cin >> c >> a >> b){
		for(int i = 1;i<=a;i++){
			if(i<=b){
				for(int j = 1;j<=29;j++){
					if(j&1) cout << c;
					else cout << ' ';
				}
			}else{
				for(int j = 1;j<=29;j++){
					if(j%4==1) cout << c;
					else cout << ' ';
				}
			}
			cout << '\n';
		}
		cout << '\n';
	}
	return 0;
} 

问题 D: 倒置排序 

acc1f88b0d6d48cab86d673320f738e5.png 

思路:

        求一下倒置后的数字,都放进一个pair或者结构体中排序后输出即可。

参考题解:

#include <iostream>
#include <vector>
#include <algorithm>
using std::cin;
using std::cout;
using std::vector;
int main(){
	cin.tie(nullptr)->sync_with_stdio(false);
	constexpr int N = 1e2+5;
	int _ = 1;
	cin >> _;
	auto solve = [&](){
		int n;cin >> n;
		vector<std::pair<int,int>> ans(N+1);
		for(int i = 1;i<=n;i++){
			int tmp;cin >> tmp;
			ans[i].second = tmp;
			int rev = 0;
			while(tmp){
				rev = rev*10+tmp%10;
				tmp/=10;
			}
			ans[i].first = rev;
		}
		std::sort(ans.begin()+1,ans.begin()+1+n);
		for(int i = 1;i<=n;i++) cout << ans[i].second << " \n"[i==n];
	};
	while(_--) solve();
	return 0;
} 

问题 E: 按日期排序 

a351f2aafc314e66a741b4ab0f1b25a0.png 

思路:
        这题是为数不多用C++的输入输出流不好读入的情况,那就用scanf和printf来实现输入输出,一个日期是一个结构体,在结构体内重载一下小于号,然后sort()一遍输出即可。

参考题解:

#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using std::vector;
int main(){
	struct node{
		int m,d,y;
		bool operator < (const node &W) const {
			if(y!=W.y) return y<W.y;
			else if(m!=W.m) return m<W.m;
			else return d<W.d;
		}
	};
	vector<node> ans;
	int month,day,year;
	while(~scanf("%d/%d/%d",&month,&day,&year)){
		ans.push_back({month,day,year});
	}
	std::sort(ans.begin(),ans.end());
	for(auto &t:ans){
		printf("%02d/%02d/%04d\n",t.m,t.d,t.y);
	}
	return 0;
} 

 问题 F: 统计图

83e923fc37b343dc81d9ec593cd44ba1.png 

思路:

        这个题也要注意输出的时候每两个字符之间都是有空格的,之前没发现WA了一次。具体思路是使用getline()或者gets()整行整行读,使用map对所有的大写字母进行计数,还需要统计这其中字符出现的最多的次数用于判断输出的行数(记为maxn),每行遍历时对应判断该行的行数(行数是从maxn到1的)是否小于等于该字母出现的次数。

参考题解:

#include <iostream>
#include <string>
#include <map>
#include <algorithm>
using std::cin;
using std::cout;
using std::string;
using std::map;
int main(){
	cin.tie(nullptr)->sync_with_stdio(false);
	string line;
	map<char,int> mp;
	while(getline(cin,line)){
		for(auto &c:line){
			if(c>='A'&&c<='Z') mp[c]++;
		}
	}
	int maxn = -1;
	for(auto &i:mp) maxn = std::max(maxn,i.second);
	for(int i = maxn;i>=1;i--){
		for(int j = 1;j<=51;j++){
			if(j&1){
				if(i<=mp['A'+(j+1)/2-1]) cout << '*';
				else cout << ' ';
			}else{
				cout << ' ';
			}
		}
		cout << '\n';
	}
	for(int i = 1;i<=51;i++){
		if(i&1){
			cout << char('A'+(i+1)/2-1);
		}else{
			cout << ' ';
		}
	}
	cout << '\n';
	return 0;
} 

问题 G: 找子串

616aa45ab8ce45b8807c94ff47b69d88.png 

思路:

        使用<string>的find()库函数即可。

参考题解:

#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::string;
int main(){
	cin.tie(nullptr)->sync_with_stdio(false);
	string s,t;
	while(cin >> s >> t){
		cout << (s.find(t)==string::npos?"No\n":"Yes\n");
	}
	return 0;
} 

问题 H: 火星数排序 

0838717bbee54768bb91896e2b1b976d.png 

 思路:

        注意看清题目,读入的是火星数,要我们排序后输出排序后的火星数。具体思路就是读入火星数,然后转换成地球数进行排序(以地球数为第一关键字),输出最终的结果即可。储存这些两个数可以分别用两个数组,或者是一个结构体数组,也可以是一个pair数组。

参考题解:

#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <algorithm>
using std::cin;
using std::cout;
using std::string;
using std::vector;
using std::map;
int main(){
	cin.tie(nullptr)->sync_with_stdio(false);
	map<int,int> mp = {{0,0},{8,1},{1,2},{5,3},{2,4},{3,5},{9,6},{4,7},{7,8},{6,9}};
	int _ = 1;
	cin >> _;
	auto solve = [&](){
		int n;cin >> n;
		vector<std::pair<int,int>> a;
		for(int i = 0;i<n;i++){
			int Mars;cin >> Mars;
			int tmp = Mars;
			vector<int> v;
			while(tmp){
				v.emplace_back(tmp%10);
				tmp/=10;
			}
			int earth = 0;
			std::reverse(v.begin(),v.end());
			for(auto &j:v){
				earth = earth*10 + mp[j];
			}
			a.emplace_back(earth,Mars);
		}
		std::sort(a.begin(),a.end());
		for(int i = 0;i<a.size();i++){
			cout << a[i].second << ' ';
		}
		cout << '\n';
	};
	while(_--) solve();
	return 0;
} 

问题 I: 字串数 

34f4edb52009452383072406f2f00ebf.png 

思路:

        推出公式:ans = (sum!)/(a1!*a2!*...*an!)。其中,sum表示数组a的和。因为数据会非常大,使用C++写的话,会爆long long,那要写高精度。如果图方便的话,就直接用Java的大整数类来写了。当然,python也能写,只不过ZISUOJ平台的python解释器有点问题,有数据读入的情况就会出错。

参考题解1(C++高精度实现):

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
vector<int> div(vector<int> &A,ll b){//高精度除法 (高精度数 除以 非高精度数)
    ll r = 0;
    vector<int> C;
    for (int i = A.size()-1; i>=0;i--){
        r = r * 10 + A[i];
        C.push_back(r / b);
        r %= b;
    }
    reverse(C.begin(),C.end());
    while (C.size()>1&&C.back()==0) C.pop_back();//去除高位零
    return C;
}
vector<int> mult1(int sum){//高精度阶乘
    vector<int> C;
    C.push_back(1);
    int i, j, temp = 0;
    int item = 0;
    for(i = 2; i <= sum; i++){
        for (j = 0; j < C.size(); j++) {
            item = C[j] * i + temp;
            C[j] = item % 10;
            temp = item / 10;
        }
        while(temp){
            C.push_back(temp % 10);
            temp /= 10;
        }
    }
    return C;
}
int mult2(int n){//普通阶乘
    int sum = 1;
    for (int i = 2; i <= n; i++) sum *= i;
    return sum;
}
int main(){
	ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);
    int n;
    while(cin >> n){
        if (n == 0) break;
        int sum = 0;
        long long a[27];
        for(int i = 1;i<=n; i++){
            cin >> a[i];
            sum += a[i];
        }
        vector<int> C = mult1(sum);
        for(int i = 1; i <= n; i++){      //运用累除的方法可以简化为高精度除以非高精度 我事先判断了12的阶乘在int的存储范围内
            C = div(C, mult2(a[i]));
        }
        for(int i = C.size() - 1;i>=0;i--) cout << C[i];
        cout << endl;
    }
    return 0;
}

参考题解2(Java大整数类实现):

import java.util.Scanner;
import java.math.BigInteger;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n;
        while(sc.hasNextInt()){
            n = sc.nextInt();
            if(n==0) break;
            long sum = 0;
            int[] a = new int[27];
            for(int i = 1;i<=n;i++){
                a[i] = sc.nextInt();
                sum += a[i];
            }
            BigInteger ans = BigInteger.ONE;
            for(int i = 1;i<=sum;i++){
                ans = ans.multiply(BigInteger.valueOf(i));
            }
            for(int i = 1;i<=n;i++){
                long tmp = 1;
                for(int j = 1;j<=a[i];j++){
                    tmp = tmp * j;
                }
                ans = ans.divide(BigInteger.valueOf(tmp));
            }
            System.out.println(ans);
        }
    }
}

 参考题解3(Python整型再大也能存的下):

from math import factorial
from sys import stdin

for line in stdin:
    n = int(line.strip())
    if n == 0:
        break
    a = list(map(int, stdin.readline().strip().split()))
    sum_a = sum(a)
    ans = factorial(sum_a)
    for num in a:
        ans //= factorial(num)
    print(ans)

问题 J: 寻找素数对

e5e7a3fa101c4c4b9b08a86011e08d1e.png 

思路:

        从n/2开始往左找(循环体变量假设为i),如果i和n-i都是素数直接输出并且break掉循环。

参考题解:

#include <iostream>
using std::cin;
using std::cout;
int main(){
	cin.tie(nullptr)->sync_with_stdio(false);
	auto isPrime = [&](int num)->bool{
		if(num<2) return false;
		for(int i = 2;i<=num/i;i++) if(num%i==0) return false;
		return true;
	};
	int m;
	while(cin >> m,m){
		int mid = m/2;
		for(int i = mid;i>=2;i--){
			if(!isPrime(i)) continue;
			if(isPrime(m-i)){
				cout << i << ' ' << m-i << '\n';
				break;
			}
		}
	}
	return 0;
} 

问题 K: 水果 

c72d0da288f94170972de5ea496e2407.png 

思路:
        最快最直接的方法就是用二维map来存,然后直接输出(它甚至都不需要任何的排序,因为map内部是红黑树实现,默认就是有序的)。

参考题解:

#include <iostream>
#include <map>
#include <string>
using std::cin;
using std::cout;
using std::map;
using std::string;
int main(){
	cin.tie(nullptr)->sync_with_stdio(false);
	auto solve = [&](){
		map<string,map<string,int>> mp;
		int n;cin >> n;
		for(int i = 1;i<=n;i++){
			string fruit,province;int num;
			cin >> fruit >> province >> num;
			mp[province][fruit]+=num;
		}
		for(auto &pro:mp){
			cout << pro.first << '\n';
			for(auto &fru:pro.second){
				cout << "   |----" << fru.first << '(' << fru.second << ")\n";
			}
		}
		cout << '\n';
	};
	int _ = 1;
	cin >> _;
	while(_--) solve();
	return 0;
} 

问题 L: 排名次

5268484f48844dc78a203b18da7f6028.png 

思路:

        结构体排序的基本题(当然用pair也可以)。

参考题解:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using std::cin;
using std::cout;
using std::string;
using std::vector;
int main(){
	cin.tie(nullptr)->sync_with_stdio(false);
	vector<std::pair<int,string>> ans;
	int n;cin >> n;
	for(int i = 1;i<=n;i++){
		string name;int score;cin >> name >> score;
		ans.emplace_back(score,name);
	}
	std::sort(ans.begin(),ans.end(),[&](const std::pair<int,string> &p1,const std::pair<int,string> &p2){
		if(p1.first!=p2.first) return p1.first>p2.first;
		else return p1.second<p2.second;
	});
	for(auto &t:ans) cout << t.second << ' ' << t.first << '\n';
	return 0;
} 

问题 M: 奇怪的处理器

753c35921aeb4f55aa564524a3e4e9ff.png 

思路:

        看懂题目就很好写了,实际上题目就是让我们从左往右找第一个出现'1'的位置,如果没出现'1',那么答案就是整个长度。如果用string读入,用<string>的库函数find_first_of()可以直接秒。

参考题解:

#include <bits/stdc++.h>
using namespace std;
int main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int n;cin >> n;
	string s;cin >> s;
	cout << (s.find_first_of('0')!=string::npos?s.find_first_of('0')+1:n) << '\n'; 
	return 0;
}

问题 N: 打印格子

c33fb2ca68d9401cad17e973ea08c788.png 

思路:

        第一第二行都比较好写,第三行和第四行模拟一下从对应的最初位置开始到碰到边界结束即可。

参考题解:

#include <iostream>
using std::cin;
using std::cout;
int main(){
	cin.tie(nullptr)->sync_with_stdio(false);
	int n,x,y;cin >> n >> x >> y;
	for(int i = 1;i<=n;i++) cout << '(' << x << ',' << i << ')' << " \n"[i==n];
	for(int i = 1;i<=n;i++) cout << '(' << i << ',' << y << ')' << " \n"[i==n];
	int tmpx = x,tmpy = y;
	while(tmpx!=1&&tmpy!=1){
		--tmpx,--tmpy;
	}
	while(tmpx!=n+1&&tmpy!=n+1){
		cout << '(' << tmpx << ',' << tmpy << ')' << " \n"[tmpx==n||tmpy==n];
		++tmpx,++tmpy;
	}
	tmpx = x,tmpy = y;
	while(tmpx!=n&&tmpy!=1){
		++tmpx,--tmpy;
	}
	while(tmpx!=0&&tmpy!=n+1){
		cout << '(' << tmpx << ',' << tmpy << ')' << " \n"[tmpx==1||tmpy==n];
		--tmpx,++tmpy;
	}
	return 0;
} 

问题 P: 孜谦的双重素数

a6aec08517fd4bb0bf1347c6dc092121.png 

思路:

        1.暴力法:如果直接外层跑for循环(假设循环变量为i),内层先判断i是否为素数跑循环,再判断i的各位数之和是否为素数,那会TLE超时;正确的做法是,内层循环先判断i的各位数之和是否为素数,再去判断i是否为素数。因为i可能会很大,如果先直接判断i的素性,那么时间复杂度最坏是O(T*((R-L+1)*sqrt(R))),最坏大约是3e10的数据量,在5s内肯定处理不了。

        2.欧拉筛(也称线性筛)+前缀和预处理:用使用欧拉筛法预处理出1~3e6内所有数的素性,在遍历一遍1~3e6(假设循环遍历为i),计算出i的各位数之和,如果i和i的各位数之和都为素数,则prefix[i]=prefix[i-1]+1否则prefix[i]=prefix[i-1]。欧拉筛和前缀和的预处理的时间复杂度都为O(n),预处理的数据量为3e6左右,而处理查询的时间复杂度是O(1)。

参考题解1(暴力法):

#include <bits/stdc++.h>
using namespace std;
bool isPrime(int num){
	if(num<2) return false;
	for(int i = 2;i<=num/i;i++) if(num%i==0) return false;
	return true;
}
void solve(){
	int l,r;cin >> l >> r;
	int cnt = 0;
	for(int i = l;i<=r;i++){
		int tmp = i,sum = 0;
		while(tmp){
			sum+=tmp%10;
			tmp/=10;
		}
		if(!isPrime(sum)) continue;
		if(!isPrime(i)) continue;
		cnt++;
	}
	cout << cnt << '\n';
}
int main() {
	ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);
	int T = 1;
	cin >> T;
	while(T--) solve();
	return 0;
}

参考题解2(欧拉筛+前缀和):

#include <iostream>
using std::cin;
using std::cout;
constexpr int N = 3e6+5;
int cnt,prime[N],sum[N];
int prefix[N];
bool vis[N];
void get_primes(int n){
    for(int i = 2;i<=n;i++){
        if(!vis[i]) prime[cnt++]=i;
        for(int j = 0;prime[j]<=n/i;j++){
            vis[prime[j]*i]=1;
            if(i%prime[j]==0) break;
        }
    }
}
int main(){
	std::ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);
	get_primes(int(3e6));
	vis[0]=vis[1]=1;
	for(int i = 1;i<=3e6;i++){
		int t = i,tmp = 0;
		while(t){
			tmp+=t%10;
			t/=10;
		}
		sum[i]=tmp;
	}
	for(int i = 1;i<=3e6;i++){
		if(!vis[sum[i]]&&!vis[i]) prefix[i]=prefix[i-1]+1;
		else prefix[i]=prefix[i-1];
	}
	int _ = 1;cin >> _;;
	while(_--){int l,r;cin >> l >> r;cout << prefix[r]-prefix[l-1] << '\n';}
	return 0;
}

问题 Q: 矩阵的局部极大值

5b7688efe5ff44c6b9cb24fe365b4e8b.png 

思路:
        从内层矩形开始遍历判断即可,满足条件就放进vector,最后先判断vector的大小,如果为0,要特殊处理输出,否则,顺序输出结果即可(因为遍历的时候就是有序的,所以不用再排序了)。

参考题解:

#include <iostream>
#include <vector>
#pragma GCC O(2)
using std::cin;
using std::cout;
using std::pair;
using std::vector;
int main(){
	cin.tie(nullptr)->sync_with_stdio(false);
	constexpr int N = 25;
	int g[N][N];
	int dx[] = {0,0,-1,1};
	int dy[] = {-1,1,0,0};
	vector<pair<pair<int,int>,int>> ans; 
	int n,m;cin >> n >> m;
	for(int i = 1;i<=n;i++) for(int j = 1;j<=m;j++) cin >> g[i][j];
	for(int i = 2;i<=n-1;i++){
		for(int j = 2;j<=m-1;j++){
			int flag = 1;
			for(int k = 0;k<4;k++){
				int u = i+dx[k],v = j+dy[k];
				if(g[i][j]<=g[u][v]){
					flag = 0;
					break;
				}
			}
			if(flag) ans.push_back({{i,j},g[i][j]});
		}
	}
	if(!ans.size()) cout << "None " << n << ' ' << m << '\n';
	else{
		for(auto &t:ans){
			cout << t.second << ' ' << t.first.first << ' ' << t.first.second << '\n';
		}
	}
	return 0;
}

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1629728.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux系统安全与应用【二】

目录 1.开关机安全控制 1.2 实例&#xff1a;GRUB 菜单设置密码 2.终端登录安全控制 2.1 限制root只在安全终端登录 ​3.弱口令检测 3.1 Joth the Ripper,JR​编辑 4.网络端口扫描 4.1 nmap命令 1.开关机安全控制 1.1 GRUB限制 限制更改GRUB引导参数 通常情况下在系统…

用fgets()替换fscanf()解决文件读取在小熊猫C++失败问题

fscanf&#xff08;&#xff09;遇到空格就结束读取&#xff0c;导致文件读取数据没完就退出读取以至于不能导入游戏地图工程。 看看到右侧小方块轨迹知晓采样区移动情况 也已经实现摄像机追随玩家效果 // 程序&#xff1a;2D RPG 地图编辑器与摄像机追随 // 作者&#xff1…

本地认证的密码去哪了?怎么保证安全的?

1. windows登录的明文密码&#xff0c;存储过程是怎么样的&#xff1f;密文存在哪个文件下?该文件是否可以打开&#xff0c;并且查看到密文&#xff1f; 系统将输入的明文密码通过hash算法转为哈希值&#xff0c;且输入的值会在内存中立即删除无法查看。 然后将密文存放在C:…

PotatoPie 4.0 实验教程(26) —— FPGA实现摄像头图像拉普拉斯锐化

为什么要对图像进行拉普拉斯锐化 对图像进行拉普拉斯锐化的目的是增强图像的边缘和细节&#xff0c;使图像看起来更加清晰和锐利。这种技术常用于图像处理中&#xff0c;具体原因如下&#xff1a; 增强图像的边缘信息&#xff1a;拉普拉斯锐化可以突出图像中的边缘特征&#x…

【go零基础】go-zero从零基础学习到实战教程 - 0环境配置

是个前端&#xff0c;最近开始学习go&#xff0c;后端除node外基本0基础&#xff0c;所以学习曲线有点绕&#xff0c;目标是个基础的服务端demo&#xff0c;搞个api服务后台&#xff0c;包含基础的用户登录、文章发布和写文章、权限控制&#xff0c;差不多就是个完整博客系统。…

2024年更新迭代最快的宿主软件FL Studio 24.0.99.4094中文激活版

FL Studio 24.0.99.4094中文激活版是我见过更新迭代最快的宿主软件&#xff0c;没有之一。FL Studio12、FL Studio20、FL Studio21、FL Studio24等等。 编辑有时甚至我刚刚下载好了最新版本&#xff0c;熟悉了新版本一些好用的操作&#xff0c;Fl Studio就又推出了更新的版本&a…

视频通话实时换脸:支持训练面部模型 | 开源日报 No.235

iperov/DeepFaceLive Stars: 19.7k License: GPL-3.0 DeepFaceLive 是一个用于 PC 实时流媒体或视频通话的人脸换装工具。 可以使用训练好的人脸模型从网络摄像头或视频中交换面部。提供多个公共面部模型&#xff0c;包括 Keanu Reeves、Mr. Bean 等。支持自己训练面部模型以…

Linux--进程控制(2)--进程的程序替换(夺舍)

目录 进程的程序替换 0.相关函数 1.先看现象 2.解释原理 3.将代码改成多进程版 4.使用其它的替换函数&#xff0c;并且认识函数参数的含义 5.其它 进程的程序替换 0.相关函数 关于进程替换我们需要了解的6个函数&#xff1a; 函数解释&#xff1a; 这些函数如果调用成功则…

Datart 扩装下载功能之PDF和图片下载

Datart 扩装下载功能之PDF和图片下载 首先下载依赖 yum install mesa-libOSMesa-devel gnu-free-sans-fonts wqy-zenhei-fonts -y 然后下载安装chrome yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm 查看chrome版本号 google…

CSS之显示覆盖内容(z-index)

前言&#xff1a; 我们有的时候&#xff0c;希望下方的内容能够显示到上方&#xff0c;达到类似于多个图层的效果&#xff0c;此时我们可以利用z-index这个属性。 介绍&#xff1b; z-index属性值是用来设置元素的堆叠顺序(元素层级)。 覆盖原则&#xff1a; <1>特殊…

Java反序列化-CC3链

前言 前面的CC1与CC6链都是通过 Runtime.exec() 进行命令执行的。当服务器的代码将 Runtime放入黑名单的时候就不能使用了。 CC3链的好处是通过动态加载类的机制实现恶意类代码执行。 版本限制 jdk8u65Commons-Collections 3.2.1 动态类加载 loadClass -> 负责加载load…

船舶空调的特殊性和标准

船用空调的特殊性 船用空调和陆用空调的区别有&#xff1a; ①海洋环境具有高盐度、高湿度的特性&#xff0c;船用空调系统应特别注意防腐和防霉&#xff1b; ②船用空调需要适应船舶在海面航行时的倾斜或摇摆&#xff1b; ③船用空调需要长期在海上运行&#xff0c;维修不易&…

unity 录制360全景渲染图

1.打开pakcageManager &#xff0c;选择packages为 unityRegisty&#xff0c;找到unityRecorder插件下载&#xff0c;点击右下角instant安装&#xff0c;如果插件列表为空&#xff0c;检查是否连接网络&#xff0c;重启Unity 2.打开录制面板 3.add recorder 选择ImageSequence …

基于canal监听MySQL binlog实现数据增量同步

一、背景 业务反馈客服消息列表查询速度慢&#xff0c;有时候甚至要差不多20秒&#xff0c;急需优化提升速度。 二、方案 引入 首先&#xff0c;体验系统&#xff0c;发现查询慢的正是消息列表查询接口。 接着去看代码的设计&#xff0c;流程比较长&#xff0c;但从代码逻…

动手学深度学习——线性回归从零实现

1. 数据集 1.1 生成数据集 要训练模型首先要准备训练数据集&#xff0c;对于线性模型 yXwb&#xff0c;定义生成数据集的函数如下&#xff1a; def synthetic_data(w, b, num_examples): #save"""生成yXwb噪声"""# 从均值为0&#xff0c;标准…

Git重修系列 ------ Git的使用和常用命令总结

一、Git的安装和配置 git安装&#xff1a; Git - Downloads git首次配置用户信息&#xff1a; $ git config --global user.name "kequan" $ git config --global user.email kequanchanqq.com $ git config --global credential store 配置 Git 以使用本地存储机…

基于自注意力机制的长短期记忆神经网络(LSTM-SelfAttention)的回归预测

提示&#xff1a;MATLAB版本需要R2023a以上 基于自注意力机制的长短期记忆神经网络&#xff08;LSTM-SelfAttention&#xff09;是一种用于时序数据预测的模型。这个模型结合了两个不同的结构&#xff0c;即长短期记忆网络&#xff08;LSTM&#xff09;和自注意力机制&#xff…

解决HttpServletRequest中的InputStream/getReader只能被读取一次的问题

一、事由 由于我们业务接口需要做签名校验&#xff0c;但因为是老系统了签名规则被放在了Body里而不是Header里面&#xff0c;但是我们不能在每个Controller层都手动去做签名校验&#xff0c;这样不是优雅的做法&#xff0c;然后我就写了一个AOP&#xff0c;在AOP中实现签名校…

Cesium.js(1):Cesium.js简介

1 前言 现有的gis开发方向较流行的是webgis开发&#xff0c;其中Cesium是一款开源的WebGIS库&#xff0c;主要用于实时地球和空间数据的可视化和分析。它提供了丰富的地图显示和数据可视化功能&#xff0c;并能实现三维可视化开发。Cesium适用于地球科学研究、军事情报分析、航…

Java编程练习之final关键字

1.final类&#xff1a;不允许任何类继承&#xff0c;并且不允许其他人对这个类进行任何改动&#xff1b; 当被某个类设置为final类时&#xff0c;类中的所有方法都被隐式的设置为final形式&#xff0c;但是final类中的成员变量既可以被定义为final形式&#xff0c;又可以被定义…