打卡第二十天
1.矩阵问题
问题描述
从键盘上输入一个整数N,按以下规律输出一个(2N+1)*(2N+1)的矩阵:
对角线的值为1,
上半三角区域值为2,
下半三角区域值为3,
左半三角区域的值为4,
右半三角区域的值为5。
输入说明
你的程序需要从标准输入设备(通常为键盘)中读入多组测试数据。每组测试数据数据占一行,大于零,小于等于8。
输出说明
对每组测试数据,你的程序需要向标准输出文件(通常为启动该程序的终端)依次输出符合要求的矩阵,每行数据与数据之间以空格分隔,在行首和行尾不要输出多余的空格。在所有数据前后,以及两组数据之间不要输出多余的空行。
个人总结
#include <iostream>
using namespace std;
int main(){
int n;
while(cin>>n){
int a[17][17]={0};
for(int i=0;i<2*n+1;i++){
for(int j=0;j<2*n+1;j++){
if(i==j||i==2*n-j) a[i][j]=1; //对角线处为1
if(j>i&&j<2*n-i) a[i][j]=2; //上半三角为2
if(j>i&&j>2*n-i) a[i][j]=5; //右半三角为5
if(i>j&&i<2*n-j) a[i][j]=4; //左半三角为4
if(i>j&&i>2*n-j) a[i][j]=3; //下半三角为3
}
}
for(int i=0;i<2*n+1;i++){
for(int j=0;j<2*n+1;j++){
if(j==0) cout<<a[i][j]; //第一列前面无空格
else{
cout<<" "<<a[i][j];
}
}
cout<<endl;
}
}
return 0;
}
2.发牌
问题描述
编制一个模拟发牌的程序。有编号为1,2,3,4四个人,将一付去掉大小怪的扑克按照如下顺序排列梅花c0-c12,方块d0-d12,红桃h0--h12,黑桃s0-s12,然后按照1,2,3,4四个人的顺序发牌,问最后每个人手上的牌有哪些。
输入说明
你的程序需要从标准输入设备(通常为键盘)中读入多组测试数据。每组输入数据由一行组成。每组数据包含一个在1到4之间的整数,代表四个人中的一个,在行首和行尾没有多余的空格。
输出说明
对每组测试数据,你的程序需要向标准输出设备(通常为启动该程序的终端)依次输出一组对应的答案。对于每组输入,输出那个人手上的牌。每组一行。每行包括13张牌,每张牌由牌的花色和牌的大小组成。牌的花色和牌的大小之间有一个空格,前后两张牌之间也有一个空格。其余数据前后没有多余的空格,两组数据之间也没有多余的空行。
个人总结
pair<char,int> 代表一张扑克牌
vector<pair<char,int>> cards 代表一叠扑克牌
vector<vector<pair<char,int>>> player(5) 代表编号为1-4的人手中的一叠牌
#include <iostream>
#include <vector>
using namespace std;
int main() {
char colors[] = {'c', 'd', 'h', 's'};
//生成 52 张牌
vector<pair<char, int>> cards;
for (int c = 0; c < 4; c++) {
for (int num = 0; num < 13; num++) {
cards.push_back({colors[c], num});
}
}
//按 1、2、3、4 顺序发牌,每个人 13 张
vector<vector<pair<char, int>>> player(5); // player[1]~player[4]
for (int i = 0; i < 52; i++) {
int p = i % 4 + 1; // 1、2、3、4 循环
player[p].push_back(cards[i]);
}
int n;
while (cin >> n) {
// 输出第 n 个人的牌
for (int i = 0; i < 13; i++) {
if (i > 0) cout << " ";
cout << player[n][i].first << " " << player[n][i].second;
}
cout << endl;
}
return 0;
}
3.数字金字塔
问题描述
考虑在下面被显示的数字金字塔(第n行有n列)。写一个程序来计算从最高点开始在底部任意处结束的路径经过数字的和的最大。每前进一步可以走到它的正下方或者右下方(往下一行、往右一列)的位置。
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
在上面的样例中,从7 到 3 到 8 到 7 到 5 的路径产生了最大和:30
输入说明
第一个行包含 R(1<= R<=1000) ,表示行的数目。后面每行为这个数字金字塔特定行包含的整数。所有的被供应的整数是非负的且不大于100。
输出说明
输出仅一行,包含那个可能得到的最大的和。
个人总结
1.动态规划问题 求最大路径和
2.要从下往上算:因为下面的点不依赖于上面的点
每个位置,都已经存好了 “从这里到底部的最大和”,一路推到顶端,顶端就是全局最大和。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
int r;
cin>>r;
vector<vector<int>> num(r,vector<int>(r));
//输入金字塔
for(int i=0;i<r;i++){
for(int j=0;j<=i;j++){
cin>>num[i][j];
}
}
// 核心:从下往上计算最大路径和
for(int i=r-2;i>=0;i--){
for(int j=0;j<=i;j++){
num[i][j]+=max(num[i+1][j],num[i+1][j+1]);
}
}
// 最顶端就是答案
cout<<num[0][0]<<endl;
return 0;
}
单词打卡

英语翻译
In recent years, pre-trained models have played an important role in artificial intelligence research. Researchers typically first train a general model using large-scale datasets and then fine-tune it on specific tasks. In this way, the model can utilize the knowledge learned during the pre-training stage to improve the performance of downstream tasks. For example, in the field of natural language processing, many language models are pre-trained on massive text corpora and achieve excellent results in tasks such as text classification, machine translation, and question answering. The pre-training and fine-tuning framework not only reduces training costs but also improves the generalization ability of models. Therefore, this approach has become an important paradigm in modern artificial intelligence research.
近几年来,预训练模型对于人工智能研究越来越重要。研究人员基本上首先用大规模数据集训练一个大概的模型,然后在特定任务上进行微调。通过这种方式,模型可以在预训练阶段利用学习到的知识提升下游任务的性能。例如,在自然语言处理领域,许多语言模型是在大量文本集合上预训练,并在文本分类,机器翻译和问题回答等任务中获得优秀的成果。预训练和微调框架不止降低了训练成本,还提高了模型的泛化能力。因此,这个方法在现代人工智能研究中已经成为一个重要的范例。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)