题目31:丑数作者: Turbo时间限制: 1s章节: 枚举问题描述对于一给定的素数集合 S {p1, p2, ..., pK}, 来考虑那些质因数全部属于S 的数的集合。这个集合包括p1, p1p2即p1乘以p2, p1p3, 和 p1p2p3 (还有其它很多)。这是个对于一个集合S的丑数集合。注意我们不认为1 是一个丑数。你的工作是对于输入的集合S去寻找集合中的第N个丑数。说明结果不超过32位整数能表示的范围比如S{2, 3, 5, 7}则前15个丑数为2,3,4,5,6,7,8,9,10,12,14,15,16,18,20输入说明第 1 行: 2个被空格分开的整数:K 和 N 1 K100 1 N100,000.第 2 行: K 个被空格分开的整数即集合S的元素输出说明单独的一行即第N个丑数。/*算法思想:动态规划 s[0]存放1下一个数是已有丑数与质数数组中的乘积来确定 找出最小的进行填充。 b[i]的值是a[i]质数应该乘的s[]上的位置 这个b[i]的值要动态变化 只要当前的a[i]*s[b[i]]不大于前一个丑数 那么必须让b[i]1也就是取下一个丑数来比较 */ #includestdio.h #includestdlib.h #includemath.h int main() { int a[103],b[103]; int k,n,i; int long s[100001]; scanf(%d %d,k,n); for(i0;ik;i) { scanf(%d,a[i]); b[i]0; } s[0]1; for(i1;in;i) { //这是最大的整型数 int因为第一位是符号位0 表示他是正数 用 INT_MAX 常量可以替代这个值。 s[i]0x7fffffff; for(int j0;jk;j) { //双重数组套用逻辑 while(a[j]*s[b[j]]s[i-1]) b[j]; if(a[j]*s[b[j]]s[i]) s[i]a[j]*s[b[j]]; } } printf(%ld\n,s[n]); return 0; }题目32笨小猴作者: Turbo时间限制: 1s章节: 基本练习字符串问题描述笨小猴的词汇量很小所以每次做英语选择题的时候都很头疼。但是他找到了一种方法经试验证明用这种方法去选择选项的时候选对的几率非常大这种方法的具体描述如下假设maxn是单词中出现次数最多的字母的出现次数minn是单词中出现次数最少的字母的出现次数如果maxn-minn是一个质数那么笨小猴就认为这是个Lucky Word这样的单词很可能就是正确的答案。样例输入error样例输出Lucky Word2样例说明单词error中出现最多的字母r出现了3次出现次数最少的字母出现了1次3-122是质数。样例输入olympic样例输出No Answer0样例说明单词olympic中所有字母都只出现了1次1-100不是质数。输入说明输入文件只有一行是一个单词其中只可能出现小写字母并且长度小于100。输出说明输出文件共两行第一行是一个字符串假设输入的的单词是Lucky Word那么输出“Lucky Word”否则输出“No Answer”第二行是一个整数如果输入单词是Lucky Word输出maxn-minn的值否则输出0。#include stdio.h #include string.h #include math.h int is_su(int n){ if(n 2) return 0; if(n 2) return 1; for(int i 2; i sqrt(n); i){ if(n % i 0) return 0; } return 1; } int main(){ char str[100]; scanf(%s, str); int len strlen(str), maxn 0, minn 100; int status[26] {0}; for(int i 0; i len; i){ int num str[i] - a; status[num]; } for(int i 0; i 26; i){ if(status[i] 0){ if(status[i] maxn) maxn status[i]; if(status[i] minn) minn status[i]; } } int num maxn - minn; if(is_su(num)) printf(Lucky Word\n%d, num); else printf(No Answer\n0); return 0; }题目33字串统计作者: Turbo时间限制: 1s章节: 基本练习字符串问题描述给定一个长度为n的字符串S还有一个数字L统计长度大于等于L的出现次数最多的子串不同的出现可以相交如果有多个输出最长的如果仍然有多个输出第一次出现最早的。输入说明第一行一个数字L。第二行是字符串S。L大于0且不超过S的长度。n60S中所有字符都是小写英文字母。输出说明一行题目要求的字符串。输入样例14bbaabbaaaaa输出样例1bbaa输入样例22bbaabbaaaaa输出样例2aa#include stdio.h #include string.h int main() { int L; char S[65]; scanf(%d\n%s, L, S); int len strlen(S); char result[65] ; int max_count 0; int result_len 0; int first_pos len; // 遍历所有可能的子串 for (int i 0; i len; i) { for (int j i L - 1; j len; j) { int sub_len j - i 1; char current[65]; strncpy(current, S i, sub_len); current[sub_len] \0; // 统计出现次数 int count 0; for (int k 0; k len - sub_len; k) { if (strncmp(S k, current, sub_len) 0) { count; } } // 更新结果 if (count max_count || (count max_count sub_len result_len) || (count max_count sub_len result_len i first_pos)) { max_count count; strcpy(result, current); result_len sub_len; first_pos i; } } } printf(%s\n, result); return 0; }34Anagrams问题作者: Turbo时间限制: 1s章节: 基本练习字符串问题描述Anagrams指的是具有如下特性的两个单词在这两个单词当中每一个英文字母不区分大小写所出现的次数都是相同的。例如“Unclear”和“Nuclear”、“Rimon”和“MinOR”都是Anagrams。编写一个程序输入两个单词然后判断一下这两个单词是否是Anagrams。每一个单词的长度不会超过80个字符而且是大小写无关的。输入说明输入有两行分别为两个单词。输出说明输出只有一个字母Y或N分别表示Yes和No。#include stdio.h #include string.h int main(){ char s1[50], s2[50]; scanf(%s\n%s, s1, s2); int len1 strlen(s1), len2 strlen(s2); int a[26] {0}, b[26] {0}; if(len1 ! len2){ printf(N); return 0; } for(int i 0; i len1; i){ if(s1[i] A s1[i] Z) s1[i] 32; int idx s1[i] - a; a[idx]; } for(int i 0; i len2; i){ if(s2[i] A s2[i] Z) s2[i] 32; int idx s2[i] - a; b[idx]; } int flag 1; for(int i 0; i 26; i){ if(a[i] ! b[i]){ flag 0; break; } } if(flag 1) printf(Y); else printf(N); return 0; }35身份证号码升级作者: Turbo时间限制: 1s章节: 基本练习字符串问题描述从1999年10月1日开始公民身份证号码由15位数字增至18位。(18位身份证号码简介)。升级方法为1、把15位身份证号码中的年份由2位(7,8位)改为四位。2、最后添加一位验证码。验证码的计算方案将前 17 位分别乘以对应系数 (7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2) 并相加然后除以 11 取余数0-10 分别对应 1 0 x 9 8 7 6 5 4 3 2。请编写一个程序用户输入15位身份证号码程序生成18位身份证号码。假设所有要升级的身份证的四位年份都是19××年输入说明一个15位的数字串作为身份证号码不用判断输入的15位字符串是否合理输出说明一个18位的字符串作为升级后的身份证号码#include stdio.h #include string.h int main(){ char s1[20], s2[20]; scanf(%s, s1); int len strlen(s1); int sum 0; int num[17] {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}; char str[11] {1, 0, x, 9, 8, 7, 6, 5, 4, 3, 2}; for(int i 0; i 18; i){ if(i 6){ s2[i] s1[i]; sum (s2[i] - 0) * num[i]; } else if(i 6){ s2[i] 1; sum (s2[i] - 0) * num[i]; } else if(i 7){ s2[i] 9; sum (s2[i] - 0) * num[i]; } else if(i 17){ s2[i] s1[i - 2]; sum (s2[i] - 0) * num[i]; } else if(i 17){ int result sum % 11; s2[i] str[result]; } } for(int i 0; i 18; i) printf(%c, s2[i]); return 0; }36彩票作者: Turbo时间限制: 1s章节: 基本练习数组问题描述为丰富男生节活动女生设置彩票抽奖环节规则如下1、每张彩票上印有7个各不相同的号码且这些号码的取值范围为[1, 33]2、每次在兑奖前都会公布一个由七个互不相同的号码构成的中奖号码3、共设置7个奖项特等奖和一等奖至六等奖。兑奖规则如下特等奖要求彩票上的7个号码都出现在中奖号码中一等奖要求彩票上的6个号码出现在中奖号码中二等奖要求彩票上的5个号码出现在中奖号码中……六等奖要求彩票上的1个号码出现在中奖号码中注不考虑号码出现的顺序例如若中奖号码为23 31 1 14 19 17 18则彩票12 8 9 23 1 16 7由于其中有两个号码23和1出现在中奖号码中所以该彩票中了五等奖。现已知中奖号码和李华买的若干彩票的号码请你写一个程序判断他的彩票中奖情况。输入说明第一行一个正整数n表示彩票数量第二行7个整数表示中奖号码下面n行每行7个整数描述n张彩票。n100000输出说明7个数字第1个数字表示特等奖的中奖张数第2个数字表示一等奖的中奖张数第3个数字表示二等奖的中奖张数……第7个数字表示六等奖的中奖张数。每个数字后都跟一个空格。#include stdio.h int main(){ int n; scanf(%d, n); int arr[7], result[8] {0};//存储六等奖五等奖...特等奖 for(int i 0; i 7; i) scanf(%d, arr[i]); for(int i 0; i n; i){ int a[7], count 0; for(int j 0; j 7; j) scanf(%d, a[j]); for(int j 0; j 7; j){ for(int k 0; k 7; k){ if(a[j] arr[k]){ count; break; } } } result[count]; } for(int i 7; i 0; i--) printf(%d , result[i]); return 0; }37质数的后代作者: Turbo时间限制: 1s章节: 基本练习数组问题描述如果一个合数由两个质数相乘而得那么我们就叫它是质数们的直接后代。现在给你一系列自然数判断它们是否是质数的直接后代。输入说明第一行一个正整数T表示需要判断的自然数数量接下来T行每行一个要判断的自然数1T202要判断的自然数105输出说明共T行依次对于输入中给出的自然数判断是否为质数的直接后代是则输出Yes否则输出No#include stdio.h #include math.h int is_su(int n){ if(n 2) return 0; if(n 2) return 1; for(int i 2; i sqrt(n); i){ if(n % i 0) return 0; } return 1; } int main(){ int t; scanf(%d, t); for(int i 0; i t; i){ int n, flag 0; scanf(%d, n); for(int i 2; i n / 2; i){ if(is_su(i)){ int num n / i; if(is_su(num) num * i n){ flag 1; break; } } } if(flag 0) printf(No\n); else printf(Yes\n); } return 0; }38高精度乘法作者: Turbo时间限制: 1s章节: 基本练习数组问题描述在C/C语言中整型所能表示的范围一般为-231到231大约21亿,即使long long型一般也只能表示到-263到263。要想计算更加规模的数就要用软件来扩展了比如用数组或字符串来模拟更多规模的数及共运算。现在输入两个整数请输出它们的乘积。输入说明两行每行一个正整数每个整数不超过10000位输出说明一行两个整数的乘积。#include stdio.h #include string.h // 高精度乘法函数 void multiply(char* num1, char* num2, char* result) { int len1 strlen(num1); int len2 strlen(num2); int len len1 len2; // 初始化结果数组为0 int res[len]; for (int i 0; i len; i) { res[i] 0; } // 模拟手算乘法 for (int i len1 - 1; i 0; i--) { for (int j len2 - 1; j 0; j--) { int mul (num1[i] - 0) * (num2[j] - 0); int p1 i j; // 进位位置 int p2 i j 1; // 当前位位置 int sum mul res[p2]; res[p2] sum % 10; res[p1] sum / 10; // 进位 } } // 将结果转换为字符串 int idx 0; int start 0; // 跳过前导0 while (start len res[start] 0) { start; } // 如果结果为0 if (start len) { result[0] 0; result[1] \0; return; } for (int i start; i len; i) { result[idx] res[i] 0; } result[idx] \0; } int main() { char num1[10010], num2[10010]; char result[20020]; // 两数相乘结果最多为len1len2位 // 读取输入 scanf(%s, num1); scanf(%s, num2); // 计算乘积 multiply(num1, num2, result); // 输出结果 printf(%s\n, result); return 0; }39阶乘末尾作者: Turbo时间限制: 1s章节: 基本练习数组问题描述给定n和len输出n!末尾len位。输入说明一行两个正整数n和len。n30, len10。输出说明一行一个字符串表示答案。长度不足用前置零补全。#include stdio.h int main(){ int n, len; scanf(%d %d, n, len); int arr[100]; arr[0] 1; int idx 1; for(int i 2; i n; i){ int carry 0; for(int j 0; j idx; j){ int num arr[j] * i carry; arr[j] num % 10; carry num / 10; } while(carry 0){ arr[idx] carry % 10; idx; carry / 10; } } if(idx len){ for(int i idx; i len; i) printf(0); //从高位到低位输出 for(int i idx - 1; i 0; i--) printf(%d, arr[i]); } else{ for(int i len - 1; i 0; i--) printf(%d, arr[i]); } return 0; }40寂寞的数作者: Turbo时间限制: 1s章节: 基本练习数组问题描述道德经曰一生二二生三三生万物。对于任意正整数n我们定义d(n)的值为为n加上组成n的各个数字的和。例如d(23)232328, d(1481)148114811495。因此给定了任意一个n作为起点你可以构造如下一个递增序列n,d(n),d(d(n)),d(d(d(n)))....例如从33开始的递增序列为33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ...我们把n叫做d(n)的生成元在上面的数列中33是39的生成元39是51的生成元等等。有一些数字甚至可以有两个生成元比如101可以由91和100生成。但也有一些数字没有任何生成元如42。我们把这样的数字称为寂寞的数字。输入说明一行一个正整数n。n10000输出说明按照升序输出小于n的所有寂寞的数字每行一个。#include stdio.h int dn(int n){ int temp n; int result n; while(temp 0){ result temp % 10; temp / 10; } return result; } int main(){ int n; scanf(%d, n); int status[10001] {0}; for(int i 0; i n; i){ int d dn(i); if(d n) status[d] 1; } for(int i 1; i n; i){ if(status[i] 0) printf(%d\n, i); } return 0; }41数列作者: Turbo时间限制: 1s章节: 枚举问题描述给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列例如当k3时这个序列是1349101213…该序列实际上就是303130313230323132303132…请你求出这个序列的第N项的值用10进制数表示。例如对于k3N100正确答案应该是981。输入说明只有1行为2个正整数用一个空格隔开k Nk、N的含义与上述的问题描述一致且3≤k≤1510≤N≤1000。输出说明计算结果是一个正整数在所有的测试数据中结果均不超过2.1*109。整数前不要有空格和其他符号。/*把自然数1,2,3,4,5,6,7,...转换为k进制然后把k进制数当作二进制来读 比如 1(十进制) 1(二进制) → 看作3⁰ 1 2(十进制) 10(二进制) → 看作3¹ 3 3(十进制) 11(二进制) → 看作3⁰3¹ 4 4(十进制) 100(二进制) → 看作3² 9 */ #include stdio.h int main(){ int k, N; scanf(%d %d, k, N); long long result 0; long long power 1;//当前k的幂从k⁰1开始 //不断处理N的每一位 while(N 0){ int digit N % 2; //获取N的二进制最低位 if(digit 1) result power; //如果这一位是1就加上对应的k的幂 power * k; //计算下一个k的幂 N / 2; //去掉N的二进制最低位 } printf(%lld\n, result); return 0; }42孪生素数作者: xxx时间限制: 1s章节: 一维数组问题描述孪生素数就是指相差2的素数对例如3和55和711和13…。这个猜想正式由希尔伯特在1900年国际数学家大会的报告上第8个问题中提出可以这样描述存在无穷多个素数p使得p 2是素数。素数对p, p 2称为孪生素数。现在给定任何正整数 N ( 10 ^ 5), 请你计算不大于 N 的孪生素数的对数。输入说明你的程序必须从标准输入中读取测试用例。输入文件由几组测试用例组成。每组测试用例占一行, 其中包含一个整数 N。当输入的 N为负数表示结束输入。输出说明对于每组测试数据输出一行包括一个整数表示不大于 N 的孪生素数的对数#include stdio.h #include math.h int is_su(int n){ if(n 2) return 0; if(n 2) return 1; for(int i 2; i sqrt(n); i){ if(n % i 0) return 0; } return 1; } int main(){ int n; while(scanf(%d, n) ! EOF){ if(n 0) break; int count 0; for(int i 2; i n; i){ if(is_su(i - 2) is_su(i)) count; } printf(%d\n, count); } return 0; }43区间k大数查询作者: Turbo时间限制: 1s章节: 基本练习数组问题描述给定一个序列每次询问序列中第l个数到第r个数中第K大的数是哪个。注意由于存在相等的元素因此第2大的数可能和第1大的数相等。输入说明第一行包含一个数n表示序列长度。第二行包含n个正整数表示给定的序列。第三个包含一个正整数m表示询问个数。接下来m行每行三个数l,r,K表示询问序列从左往右第l个数到第r个数中从大往小第K大的数是哪个。序列元素从1开始标号。n,m1000保证k(r-l1)序列中的数106。输出说明总共输出m行每行一个数表示询问的答案。#include stdio.h int main(){ int n; scanf(%d, n); int arr[n]; for(int i 0; i n; i) scanf(%d, arr[i]); int m; scanf(%d, m); for(int q 0; q m; q){ int l, r, k; scanf(%d %d %d, l, r, k); int temp[n]; for(int i 0; i n; i) temp[i] arr[i]; int start l - 1; //区间起始索引 int end r - 1; //区间结束索引 for(int i start; i end; i){ for(int j i 1; j end; j){ if(temp[i] temp[j]){ int tmp temp[i]; temp[i] temp[j]; temp[j] tmp; } } } printf(%d\n, temp[start k - 1]); } return 0; }44数的统计作者: Turbo时间限制: 1s章节: 基本练习数组问题描述在一个有限的正整数序列中有些数会多次重复出现在这个序列中。如序列3121512。其中1就出现3次2出现2次3出现1 次5出现1次。你的任务是对于给定的正整数序列从小到大依次输出序列中出现的数及出现的次数。输入说明第一行正整数n表示给定序列中正整数的个数。第二行是n 个用空格隔开的正整数x代表给定的序列。n10000x1000,000。输出说明若干行每行两个用一个空格隔开的数第一个是数列中出现的数第二个是该数在序列中出现的次数。#include stdio.h int main(){ int n; scanf(%d, n); int arr[n]; for(int i 0; i n; i) scanf(%d, arr[i]); for(int i 0; i n - 1; i){ for(int j i 1; j n; j){ if(arr[i] arr[j]){ int temp arr[i]; arr[i] arr[j]; arr[j] temp; } } } int current arr[0]; int count 1; for(int i 1; i n; i){ if(arr[i] current) count; else{ printf(%d %d\n, current, count); current arr[i]; count 1; } } printf(%d %d\n, current, count); return 0; }45数字黑洞作者: Turbo时间限制: 1s章节: 基本练习数组问题描述任意一个四位数只要它们各个位上的数字是不全相同的就有这样的规律1)将组成该四位数的四个数字由大到小排列形成由这四个数字构成的最大的四位数2)将组成该四位数的四个数字由小到大排列形成由这四个数字构成的最小的四位数(如果四个数中含有0则得到的数不足四位)3)求两个数的差得到一个新的四位数(高位零保留)。重复以上过程最后一定会得到的结果是6174。比如4312 3087 8352 6174经过三次变换得到6174输入说明一个四位整数输入保证四位数字不全相同输出说明一个整数表示这个数字经过多少次变换能得到6174#include stdio.h int main(){ int num; scanf(%d, num); int count 0; while(num ! 6174){ int digits[4]; digits[0] num / 1000; digits[1] (num / 100) % 10; digits[2] (num / 10) % 10; digits[3] num % 10; for(int i 0; i 3; i){ for(int j i 1; j 4; j){ if(digits[i] digits[j]){ int temp digits[i]; digits[i] digits[j]; digits[j] temp; } } } int min_num 0; for(int i 0; i 4; i) min_num min_num * 10 digits[i]; int max_num 0; for(int i 3; i 0; i--) max_num max_num * 10 digits[i]; num max_num - min_num; count; } printf(%d, count); return 0; }翻译Pretrained models have become a dominant paradigm in modern artificial intelligence. These models are first trained on large-scale datasets to learn general representations and then fine-tuned on specific downstream tasks. This approach significantly reduces the need for labeled data and improves model performance. In natural language processing, models like BERT and GPT are pre-trained using self-supervised learning objectives. Fine-tuning allows these models to adapt to tasks such as text classification, sentiment analysis, and question answering. Transfer learning plays a crucial role in this process by leveraging knowledge from one domain to another. Despite their effectiveness, pretrained models require substantial computational resources, raising concerns about efficiency and environmental impact.预训练模型已经变成现代人工智能的主要范例。这些模型首先在大规模数据集上训练学习普遍的展示然后在特定的下采样任务中进行微调。这种方法显著减少了对有标签模型的需要并且提升了模型性能。在自然语言处理中像BERT和GPT模型使用他们自身监管的学习目标来进行预训练。微调可以让这些模型适应例如文本分类、感觉分析和问题问答等任务。转移学习在这个过程中起到一个关键的作用通过从一个领域学习知识到另一个领域。尽管这些方法很高效但是预训练模型需要大量的计算资源带来了关于效率和环境影响的问题。self-supervised learning objectives自监督学习目标sentiment analysis情感分析transfer learning迁移学习by leveraging knowledge from one domain to another通过将知识从一个领域迁移到另一个领域
练习题31-45 翻译59
发布时间:2026/5/17 4:59:03
题目31:丑数作者: Turbo时间限制: 1s章节: 枚举问题描述对于一给定的素数集合 S {p1, p2, ..., pK}, 来考虑那些质因数全部属于S 的数的集合。这个集合包括p1, p1p2即p1乘以p2, p1p3, 和 p1p2p3 (还有其它很多)。这是个对于一个集合S的丑数集合。注意我们不认为1 是一个丑数。你的工作是对于输入的集合S去寻找集合中的第N个丑数。说明结果不超过32位整数能表示的范围比如S{2, 3, 5, 7}则前15个丑数为2,3,4,5,6,7,8,9,10,12,14,15,16,18,20输入说明第 1 行: 2个被空格分开的整数:K 和 N 1 K100 1 N100,000.第 2 行: K 个被空格分开的整数即集合S的元素输出说明单独的一行即第N个丑数。/*算法思想:动态规划 s[0]存放1下一个数是已有丑数与质数数组中的乘积来确定 找出最小的进行填充。 b[i]的值是a[i]质数应该乘的s[]上的位置 这个b[i]的值要动态变化 只要当前的a[i]*s[b[i]]不大于前一个丑数 那么必须让b[i]1也就是取下一个丑数来比较 */ #includestdio.h #includestdlib.h #includemath.h int main() { int a[103],b[103]; int k,n,i; int long s[100001]; scanf(%d %d,k,n); for(i0;ik;i) { scanf(%d,a[i]); b[i]0; } s[0]1; for(i1;in;i) { //这是最大的整型数 int因为第一位是符号位0 表示他是正数 用 INT_MAX 常量可以替代这个值。 s[i]0x7fffffff; for(int j0;jk;j) { //双重数组套用逻辑 while(a[j]*s[b[j]]s[i-1]) b[j]; if(a[j]*s[b[j]]s[i]) s[i]a[j]*s[b[j]]; } } printf(%ld\n,s[n]); return 0; }题目32笨小猴作者: Turbo时间限制: 1s章节: 基本练习字符串问题描述笨小猴的词汇量很小所以每次做英语选择题的时候都很头疼。但是他找到了一种方法经试验证明用这种方法去选择选项的时候选对的几率非常大这种方法的具体描述如下假设maxn是单词中出现次数最多的字母的出现次数minn是单词中出现次数最少的字母的出现次数如果maxn-minn是一个质数那么笨小猴就认为这是个Lucky Word这样的单词很可能就是正确的答案。样例输入error样例输出Lucky Word2样例说明单词error中出现最多的字母r出现了3次出现次数最少的字母出现了1次3-122是质数。样例输入olympic样例输出No Answer0样例说明单词olympic中所有字母都只出现了1次1-100不是质数。输入说明输入文件只有一行是一个单词其中只可能出现小写字母并且长度小于100。输出说明输出文件共两行第一行是一个字符串假设输入的的单词是Lucky Word那么输出“Lucky Word”否则输出“No Answer”第二行是一个整数如果输入单词是Lucky Word输出maxn-minn的值否则输出0。#include stdio.h #include string.h #include math.h int is_su(int n){ if(n 2) return 0; if(n 2) return 1; for(int i 2; i sqrt(n); i){ if(n % i 0) return 0; } return 1; } int main(){ char str[100]; scanf(%s, str); int len strlen(str), maxn 0, minn 100; int status[26] {0}; for(int i 0; i len; i){ int num str[i] - a; status[num]; } for(int i 0; i 26; i){ if(status[i] 0){ if(status[i] maxn) maxn status[i]; if(status[i] minn) minn status[i]; } } int num maxn - minn; if(is_su(num)) printf(Lucky Word\n%d, num); else printf(No Answer\n0); return 0; }题目33字串统计作者: Turbo时间限制: 1s章节: 基本练习字符串问题描述给定一个长度为n的字符串S还有一个数字L统计长度大于等于L的出现次数最多的子串不同的出现可以相交如果有多个输出最长的如果仍然有多个输出第一次出现最早的。输入说明第一行一个数字L。第二行是字符串S。L大于0且不超过S的长度。n60S中所有字符都是小写英文字母。输出说明一行题目要求的字符串。输入样例14bbaabbaaaaa输出样例1bbaa输入样例22bbaabbaaaaa输出样例2aa#include stdio.h #include string.h int main() { int L; char S[65]; scanf(%d\n%s, L, S); int len strlen(S); char result[65] ; int max_count 0; int result_len 0; int first_pos len; // 遍历所有可能的子串 for (int i 0; i len; i) { for (int j i L - 1; j len; j) { int sub_len j - i 1; char current[65]; strncpy(current, S i, sub_len); current[sub_len] \0; // 统计出现次数 int count 0; for (int k 0; k len - sub_len; k) { if (strncmp(S k, current, sub_len) 0) { count; } } // 更新结果 if (count max_count || (count max_count sub_len result_len) || (count max_count sub_len result_len i first_pos)) { max_count count; strcpy(result, current); result_len sub_len; first_pos i; } } } printf(%s\n, result); return 0; }34Anagrams问题作者: Turbo时间限制: 1s章节: 基本练习字符串问题描述Anagrams指的是具有如下特性的两个单词在这两个单词当中每一个英文字母不区分大小写所出现的次数都是相同的。例如“Unclear”和“Nuclear”、“Rimon”和“MinOR”都是Anagrams。编写一个程序输入两个单词然后判断一下这两个单词是否是Anagrams。每一个单词的长度不会超过80个字符而且是大小写无关的。输入说明输入有两行分别为两个单词。输出说明输出只有一个字母Y或N分别表示Yes和No。#include stdio.h #include string.h int main(){ char s1[50], s2[50]; scanf(%s\n%s, s1, s2); int len1 strlen(s1), len2 strlen(s2); int a[26] {0}, b[26] {0}; if(len1 ! len2){ printf(N); return 0; } for(int i 0; i len1; i){ if(s1[i] A s1[i] Z) s1[i] 32; int idx s1[i] - a; a[idx]; } for(int i 0; i len2; i){ if(s2[i] A s2[i] Z) s2[i] 32; int idx s2[i] - a; b[idx]; } int flag 1; for(int i 0; i 26; i){ if(a[i] ! b[i]){ flag 0; break; } } if(flag 1) printf(Y); else printf(N); return 0; }35身份证号码升级作者: Turbo时间限制: 1s章节: 基本练习字符串问题描述从1999年10月1日开始公民身份证号码由15位数字增至18位。(18位身份证号码简介)。升级方法为1、把15位身份证号码中的年份由2位(7,8位)改为四位。2、最后添加一位验证码。验证码的计算方案将前 17 位分别乘以对应系数 (7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2) 并相加然后除以 11 取余数0-10 分别对应 1 0 x 9 8 7 6 5 4 3 2。请编写一个程序用户输入15位身份证号码程序生成18位身份证号码。假设所有要升级的身份证的四位年份都是19××年输入说明一个15位的数字串作为身份证号码不用判断输入的15位字符串是否合理输出说明一个18位的字符串作为升级后的身份证号码#include stdio.h #include string.h int main(){ char s1[20], s2[20]; scanf(%s, s1); int len strlen(s1); int sum 0; int num[17] {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}; char str[11] {1, 0, x, 9, 8, 7, 6, 5, 4, 3, 2}; for(int i 0; i 18; i){ if(i 6){ s2[i] s1[i]; sum (s2[i] - 0) * num[i]; } else if(i 6){ s2[i] 1; sum (s2[i] - 0) * num[i]; } else if(i 7){ s2[i] 9; sum (s2[i] - 0) * num[i]; } else if(i 17){ s2[i] s1[i - 2]; sum (s2[i] - 0) * num[i]; } else if(i 17){ int result sum % 11; s2[i] str[result]; } } for(int i 0; i 18; i) printf(%c, s2[i]); return 0; }36彩票作者: Turbo时间限制: 1s章节: 基本练习数组问题描述为丰富男生节活动女生设置彩票抽奖环节规则如下1、每张彩票上印有7个各不相同的号码且这些号码的取值范围为[1, 33]2、每次在兑奖前都会公布一个由七个互不相同的号码构成的中奖号码3、共设置7个奖项特等奖和一等奖至六等奖。兑奖规则如下特等奖要求彩票上的7个号码都出现在中奖号码中一等奖要求彩票上的6个号码出现在中奖号码中二等奖要求彩票上的5个号码出现在中奖号码中……六等奖要求彩票上的1个号码出现在中奖号码中注不考虑号码出现的顺序例如若中奖号码为23 31 1 14 19 17 18则彩票12 8 9 23 1 16 7由于其中有两个号码23和1出现在中奖号码中所以该彩票中了五等奖。现已知中奖号码和李华买的若干彩票的号码请你写一个程序判断他的彩票中奖情况。输入说明第一行一个正整数n表示彩票数量第二行7个整数表示中奖号码下面n行每行7个整数描述n张彩票。n100000输出说明7个数字第1个数字表示特等奖的中奖张数第2个数字表示一等奖的中奖张数第3个数字表示二等奖的中奖张数……第7个数字表示六等奖的中奖张数。每个数字后都跟一个空格。#include stdio.h int main(){ int n; scanf(%d, n); int arr[7], result[8] {0};//存储六等奖五等奖...特等奖 for(int i 0; i 7; i) scanf(%d, arr[i]); for(int i 0; i n; i){ int a[7], count 0; for(int j 0; j 7; j) scanf(%d, a[j]); for(int j 0; j 7; j){ for(int k 0; k 7; k){ if(a[j] arr[k]){ count; break; } } } result[count]; } for(int i 7; i 0; i--) printf(%d , result[i]); return 0; }37质数的后代作者: Turbo时间限制: 1s章节: 基本练习数组问题描述如果一个合数由两个质数相乘而得那么我们就叫它是质数们的直接后代。现在给你一系列自然数判断它们是否是质数的直接后代。输入说明第一行一个正整数T表示需要判断的自然数数量接下来T行每行一个要判断的自然数1T202要判断的自然数105输出说明共T行依次对于输入中给出的自然数判断是否为质数的直接后代是则输出Yes否则输出No#include stdio.h #include math.h int is_su(int n){ if(n 2) return 0; if(n 2) return 1; for(int i 2; i sqrt(n); i){ if(n % i 0) return 0; } return 1; } int main(){ int t; scanf(%d, t); for(int i 0; i t; i){ int n, flag 0; scanf(%d, n); for(int i 2; i n / 2; i){ if(is_su(i)){ int num n / i; if(is_su(num) num * i n){ flag 1; break; } } } if(flag 0) printf(No\n); else printf(Yes\n); } return 0; }38高精度乘法作者: Turbo时间限制: 1s章节: 基本练习数组问题描述在C/C语言中整型所能表示的范围一般为-231到231大约21亿,即使long long型一般也只能表示到-263到263。要想计算更加规模的数就要用软件来扩展了比如用数组或字符串来模拟更多规模的数及共运算。现在输入两个整数请输出它们的乘积。输入说明两行每行一个正整数每个整数不超过10000位输出说明一行两个整数的乘积。#include stdio.h #include string.h // 高精度乘法函数 void multiply(char* num1, char* num2, char* result) { int len1 strlen(num1); int len2 strlen(num2); int len len1 len2; // 初始化结果数组为0 int res[len]; for (int i 0; i len; i) { res[i] 0; } // 模拟手算乘法 for (int i len1 - 1; i 0; i--) { for (int j len2 - 1; j 0; j--) { int mul (num1[i] - 0) * (num2[j] - 0); int p1 i j; // 进位位置 int p2 i j 1; // 当前位位置 int sum mul res[p2]; res[p2] sum % 10; res[p1] sum / 10; // 进位 } } // 将结果转换为字符串 int idx 0; int start 0; // 跳过前导0 while (start len res[start] 0) { start; } // 如果结果为0 if (start len) { result[0] 0; result[1] \0; return; } for (int i start; i len; i) { result[idx] res[i] 0; } result[idx] \0; } int main() { char num1[10010], num2[10010]; char result[20020]; // 两数相乘结果最多为len1len2位 // 读取输入 scanf(%s, num1); scanf(%s, num2); // 计算乘积 multiply(num1, num2, result); // 输出结果 printf(%s\n, result); return 0; }39阶乘末尾作者: Turbo时间限制: 1s章节: 基本练习数组问题描述给定n和len输出n!末尾len位。输入说明一行两个正整数n和len。n30, len10。输出说明一行一个字符串表示答案。长度不足用前置零补全。#include stdio.h int main(){ int n, len; scanf(%d %d, n, len); int arr[100]; arr[0] 1; int idx 1; for(int i 2; i n; i){ int carry 0; for(int j 0; j idx; j){ int num arr[j] * i carry; arr[j] num % 10; carry num / 10; } while(carry 0){ arr[idx] carry % 10; idx; carry / 10; } } if(idx len){ for(int i idx; i len; i) printf(0); //从高位到低位输出 for(int i idx - 1; i 0; i--) printf(%d, arr[i]); } else{ for(int i len - 1; i 0; i--) printf(%d, arr[i]); } return 0; }40寂寞的数作者: Turbo时间限制: 1s章节: 基本练习数组问题描述道德经曰一生二二生三三生万物。对于任意正整数n我们定义d(n)的值为为n加上组成n的各个数字的和。例如d(23)232328, d(1481)148114811495。因此给定了任意一个n作为起点你可以构造如下一个递增序列n,d(n),d(d(n)),d(d(d(n)))....例如从33开始的递增序列为33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ...我们把n叫做d(n)的生成元在上面的数列中33是39的生成元39是51的生成元等等。有一些数字甚至可以有两个生成元比如101可以由91和100生成。但也有一些数字没有任何生成元如42。我们把这样的数字称为寂寞的数字。输入说明一行一个正整数n。n10000输出说明按照升序输出小于n的所有寂寞的数字每行一个。#include stdio.h int dn(int n){ int temp n; int result n; while(temp 0){ result temp % 10; temp / 10; } return result; } int main(){ int n; scanf(%d, n); int status[10001] {0}; for(int i 0; i n; i){ int d dn(i); if(d n) status[d] 1; } for(int i 1; i n; i){ if(status[i] 0) printf(%d\n, i); } return 0; }41数列作者: Turbo时间限制: 1s章节: 枚举问题描述给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列例如当k3时这个序列是1349101213…该序列实际上就是303130313230323132303132…请你求出这个序列的第N项的值用10进制数表示。例如对于k3N100正确答案应该是981。输入说明只有1行为2个正整数用一个空格隔开k Nk、N的含义与上述的问题描述一致且3≤k≤1510≤N≤1000。输出说明计算结果是一个正整数在所有的测试数据中结果均不超过2.1*109。整数前不要有空格和其他符号。/*把自然数1,2,3,4,5,6,7,...转换为k进制然后把k进制数当作二进制来读 比如 1(十进制) 1(二进制) → 看作3⁰ 1 2(十进制) 10(二进制) → 看作3¹ 3 3(十进制) 11(二进制) → 看作3⁰3¹ 4 4(十进制) 100(二进制) → 看作3² 9 */ #include stdio.h int main(){ int k, N; scanf(%d %d, k, N); long long result 0; long long power 1;//当前k的幂从k⁰1开始 //不断处理N的每一位 while(N 0){ int digit N % 2; //获取N的二进制最低位 if(digit 1) result power; //如果这一位是1就加上对应的k的幂 power * k; //计算下一个k的幂 N / 2; //去掉N的二进制最低位 } printf(%lld\n, result); return 0; }42孪生素数作者: xxx时间限制: 1s章节: 一维数组问题描述孪生素数就是指相差2的素数对例如3和55和711和13…。这个猜想正式由希尔伯特在1900年国际数学家大会的报告上第8个问题中提出可以这样描述存在无穷多个素数p使得p 2是素数。素数对p, p 2称为孪生素数。现在给定任何正整数 N ( 10 ^ 5), 请你计算不大于 N 的孪生素数的对数。输入说明你的程序必须从标准输入中读取测试用例。输入文件由几组测试用例组成。每组测试用例占一行, 其中包含一个整数 N。当输入的 N为负数表示结束输入。输出说明对于每组测试数据输出一行包括一个整数表示不大于 N 的孪生素数的对数#include stdio.h #include math.h int is_su(int n){ if(n 2) return 0; if(n 2) return 1; for(int i 2; i sqrt(n); i){ if(n % i 0) return 0; } return 1; } int main(){ int n; while(scanf(%d, n) ! EOF){ if(n 0) break; int count 0; for(int i 2; i n; i){ if(is_su(i - 2) is_su(i)) count; } printf(%d\n, count); } return 0; }43区间k大数查询作者: Turbo时间限制: 1s章节: 基本练习数组问题描述给定一个序列每次询问序列中第l个数到第r个数中第K大的数是哪个。注意由于存在相等的元素因此第2大的数可能和第1大的数相等。输入说明第一行包含一个数n表示序列长度。第二行包含n个正整数表示给定的序列。第三个包含一个正整数m表示询问个数。接下来m行每行三个数l,r,K表示询问序列从左往右第l个数到第r个数中从大往小第K大的数是哪个。序列元素从1开始标号。n,m1000保证k(r-l1)序列中的数106。输出说明总共输出m行每行一个数表示询问的答案。#include stdio.h int main(){ int n; scanf(%d, n); int arr[n]; for(int i 0; i n; i) scanf(%d, arr[i]); int m; scanf(%d, m); for(int q 0; q m; q){ int l, r, k; scanf(%d %d %d, l, r, k); int temp[n]; for(int i 0; i n; i) temp[i] arr[i]; int start l - 1; //区间起始索引 int end r - 1; //区间结束索引 for(int i start; i end; i){ for(int j i 1; j end; j){ if(temp[i] temp[j]){ int tmp temp[i]; temp[i] temp[j]; temp[j] tmp; } } } printf(%d\n, temp[start k - 1]); } return 0; }44数的统计作者: Turbo时间限制: 1s章节: 基本练习数组问题描述在一个有限的正整数序列中有些数会多次重复出现在这个序列中。如序列3121512。其中1就出现3次2出现2次3出现1 次5出现1次。你的任务是对于给定的正整数序列从小到大依次输出序列中出现的数及出现的次数。输入说明第一行正整数n表示给定序列中正整数的个数。第二行是n 个用空格隔开的正整数x代表给定的序列。n10000x1000,000。输出说明若干行每行两个用一个空格隔开的数第一个是数列中出现的数第二个是该数在序列中出现的次数。#include stdio.h int main(){ int n; scanf(%d, n); int arr[n]; for(int i 0; i n; i) scanf(%d, arr[i]); for(int i 0; i n - 1; i){ for(int j i 1; j n; j){ if(arr[i] arr[j]){ int temp arr[i]; arr[i] arr[j]; arr[j] temp; } } } int current arr[0]; int count 1; for(int i 1; i n; i){ if(arr[i] current) count; else{ printf(%d %d\n, current, count); current arr[i]; count 1; } } printf(%d %d\n, current, count); return 0; }45数字黑洞作者: Turbo时间限制: 1s章节: 基本练习数组问题描述任意一个四位数只要它们各个位上的数字是不全相同的就有这样的规律1)将组成该四位数的四个数字由大到小排列形成由这四个数字构成的最大的四位数2)将组成该四位数的四个数字由小到大排列形成由这四个数字构成的最小的四位数(如果四个数中含有0则得到的数不足四位)3)求两个数的差得到一个新的四位数(高位零保留)。重复以上过程最后一定会得到的结果是6174。比如4312 3087 8352 6174经过三次变换得到6174输入说明一个四位整数输入保证四位数字不全相同输出说明一个整数表示这个数字经过多少次变换能得到6174#include stdio.h int main(){ int num; scanf(%d, num); int count 0; while(num ! 6174){ int digits[4]; digits[0] num / 1000; digits[1] (num / 100) % 10; digits[2] (num / 10) % 10; digits[3] num % 10; for(int i 0; i 3; i){ for(int j i 1; j 4; j){ if(digits[i] digits[j]){ int temp digits[i]; digits[i] digits[j]; digits[j] temp; } } } int min_num 0; for(int i 0; i 4; i) min_num min_num * 10 digits[i]; int max_num 0; for(int i 3; i 0; i--) max_num max_num * 10 digits[i]; num max_num - min_num; count; } printf(%d, count); return 0; }翻译Pretrained models have become a dominant paradigm in modern artificial intelligence. These models are first trained on large-scale datasets to learn general representations and then fine-tuned on specific downstream tasks. This approach significantly reduces the need for labeled data and improves model performance. In natural language processing, models like BERT and GPT are pre-trained using self-supervised learning objectives. Fine-tuning allows these models to adapt to tasks such as text classification, sentiment analysis, and question answering. Transfer learning plays a crucial role in this process by leveraging knowledge from one domain to another. Despite their effectiveness, pretrained models require substantial computational resources, raising concerns about efficiency and environmental impact.预训练模型已经变成现代人工智能的主要范例。这些模型首先在大规模数据集上训练学习普遍的展示然后在特定的下采样任务中进行微调。这种方法显著减少了对有标签模型的需要并且提升了模型性能。在自然语言处理中像BERT和GPT模型使用他们自身监管的学习目标来进行预训练。微调可以让这些模型适应例如文本分类、感觉分析和问题问答等任务。转移学习在这个过程中起到一个关键的作用通过从一个领域学习知识到另一个领域。尽管这些方法很高效但是预训练模型需要大量的计算资源带来了关于效率和环境影响的问题。self-supervised learning objectives自监督学习目标sentiment analysis情感分析transfer learning迁移学习by leveraging knowledge from one domain to another通过将知识从一个领域迁移到另一个领域