news 2026/9/25 6:18:39

西工大NOJ C语言100题:判题机制、核心题型与一次通过实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
西工大NOJ C语言100题:判题机制、核心题型与一次通过实战指南

1. 从“能跑就行”到“一次通过”:西工大NOJ的C语言刷题逻辑

如果你正在西工大读大一或者大二,大概率绕不开NOJ这个平台。全称是“西北工业大学在线评测系统”,校内同学更习惯直接叫它“noj西工大”。C程序设计这门课几乎所有的上机作业和实验环节都挂在这个平台上,老师布置的题目从基础语法到简单算法,一共一百来道。很多同学第一次打开题目列表的时候觉得“就这?”,然后提交第一次就吃了一个红色的Wrong Answer,接着是编译错误、运行超时、格式错误轮番上阵,一个晚上耗在一道题上也是常有的事。

我当年刷这套题的时候,最大的感受是:NOJ的判题逻辑和你在本地Dev-C++或者VS里跑代码完全不是一回事。本地跑通只代表你的逻辑在你自己输入的那组数据上是对的,而NOJ后台准备了多组测试数据,包括边界值、极端输入、格式陷阱。你本地测试用scanf("%d",&n)读一个整数没问题,但题目要求多组输入直到文件结束,你没写while(scanf(...)!=EOF),后台第二组数据就直接读不进去了。这类问题在100题里反复出现,不是你不会C语言,是你不知道NOJ的“脾气”。

这篇文章面向的是正在刷或者准备刷西工大NOJ C程序设计100题的同学,也适合任何用在线评测系统练习C语言基础的人参考。我不会只给你一堆代码让你抄,而是把每一类题型的判题逻辑、常见坑点、代码模板和调试方法拆开讲清楚。你把这套东西吃透之后,看到题目就能判断它属于哪个类型、该用什么输入输出模式、边界条件在哪里,基本上能做到一次提交就AC。下面我从NOJ的判题机制开始,逐层拆解这套题的核心逻辑和实操方法。

2. NOJ判题机制与本地调试的本质差异

2.1 为什么本地跑通不等于NOJ能过

很多同学拿到题目后的第一反应是打开Dev-C++,把样例输入敲进去,看到输出和样例一致就复制粘贴到NOJ提交框里。这个流程本身没错,但问题在于你只验证了一组数据。NOJ的判题方式是:后台有多组测试数据,每组数据分别输入你的程序,把你的输出和标准答案逐字符比对。只要有一组对不上,就是Wrong Answer。更严格的是,有些题目要求输出格式精确到空格和换行,多一个空格、少一个换行都算错。

我见过最典型的例子是一道“计算两个整数的和”的题目。题目描述里写“输出一行,包含一个整数”,样例输入是1 2,样例输出是3。很多同学写printf("%d\n",a+b),本地跑出来是3加一个换行,看起来没问题。但NOJ的标准答案文件末尾可能没有换行,或者有的题目要求末尾必须有换行。这种差异在本地根本看不出来,因为终端显示效果一样,但判题系统是逐字节比对的。

提示:NOJ的判题结果里,Presentation Error(格式错误)和Wrong Answer是两种不同的错误。PE说明你的逻辑大概率是对的,只是输出格式有细微偏差,比如多了空格、少了换行、大小写不对。看到PE不要慌,先检查输出格式。

2.2 输入模式的三种类型及识别方法

NOJ的100题里,输入模式基本可以归为三类,识别清楚类型是写对代码的第一步。

第一类是单组输入。题目描述里通常写“输入一行,包含两个整数”或者“输入一个正整数n”。这种最简单,用普通的scanf读一次就行。比如“求两个整数的最大值”,代码就是scanf("%d%d",&a,&b); printf("%d\n",a>b?a:b);。

第二类是多组输入直到文件结束。题目描述里会出现“输入包含多组测试数据”或者“输入若干组数据”这样的字眼。这时候你必须用while(scanf(...)!=EOF)或者while(~scanf(...))来循环读取。EOF是End Of File的缩写,在Windows下按Ctrl+Z再回车可以模拟,在Linux/Mac下按Ctrl+D。NOJ的后台数据文件读完之后,scanf会返回EOF,循环就结束了。

第三类是先读组数再循环。题目描述里写“第一行是一个整数T,表示有T组测试数据”。这种模式最清晰,先读T,然后for(int i=0;i<T;i++)循环T次,每次读一组数据处理。

我整理了一个对照表,方便你快速判断:

题目描述关键词输入类型代码模板
“输入一行”“输入一个”单组输入直接scanf一次
“多组测试数据”“若干组”多组直到EOFwhile(scanf(...)!=EOF)
“第一行是T”“有T组”先读组数scanf("%d",&T); for(...)

识别错输入类型是NOJ上最高频的错误来源之一。我当年有一道题卡了四十分钟,就是因为题目里写了“输入包含多组数据”,我愣是没看见,一直用单组输入提交,每次都是WA,最后把题目描述逐字读了一遍才发现。

2.3 输出格式的隐形陷阱

输出格式的坑比输入格式更隐蔽。NOJ的题目对输出格式的要求通常写在“输出”那一栏里,但很多同学只看样例输出,觉得差不多就行。实际上,样例输出只是给你看格式的,真正的判题标准是题目描述里的文字要求。

常见的输出格式陷阱包括:行末是否需要换行、多个输出之间是否有空行、数字之间是用空格还是逗号分隔、字符串是否需要引号、浮点数保留几位小数。比如有一道“求圆的面积”的题目,要求“保留两位小数”,你写printf("%f",area)输出六位小数,直接WA。必须写printf("%.2f",area)。

还有一道“输出乘法口诀表”的题目,要求每个等式之间用空格分隔,每行末尾不能有多余空格。很多同学写循环的时候,最后一个等式后面也加了空格,导致PE。正确的做法是在循环里判断,不是最后一个就输出空格,是最后一个就只输出换行。

注意:NOJ的浮点数比较通常有精度要求,一般是1e-6或者1e-8。如果你用==直接比较两个浮点数,大概率会出错。正确做法是fabs(a-b)<1e-6。

3. 从100题里提炼出的六类核心题型与代码骨架

3.1 基础运算与表达式求值类

这类题目在100题里占比最大,大概有三十道左右,涵盖加减乘除、取余、幂运算、绝对值、三角函数等。看起来简单,但坑点集中在数据类型和运算顺序上。

最典型的是整数除法。C语言里两个整数相除,结果还是整数,小数部分直接截断。比如5/2的结果是2,不是2.5。如果你要得到小数结果,必须把其中一个操作数转成浮点数,写5.0/2或者(double)5/2。有一道“计算平均分”的题目,输入三个整数,输出平均分保留两位小数。很多同学写printf("%.2f",(a+b+c)/3),结果永远是整数部分加.00,因为(a+b+c)/3先做了整数除法。正确写法是printf("%.2f",(a+b+c)/3.0)。

取余运算也有坑。C语言里%只能用于整数,不能用于浮点数。而且负数取余的结果在不同编译器下可能不同,NOJ用的是GCC,负数取余的结果符号和被除数一致。比如-7%3的结果是-1,不是2。如果题目要求得到非负余数,你需要手动调整:((a%b)+b)%b。

幂运算不能用^,那是按位异或。要算a的b次方,可以用pow(a,b)函数,需要包含math.h头文件,而且返回值是double类型。如果结果要求是整数,记得强制转换:(int)pow(a,b)。但要注意浮点数精度问题,pow(2,3)可能返回7.999999,转成int就变成7了。更稳妥的做法是用循环自己算整数幂。

// 整数快速幂模板 long long quick_pow(long long a, long long b) { long long res = 1; while (b > 0) { if (b & 1) res *= a; a *= a; b >>= 1; } return res; }

3.2 循环结构与图形输出类

图形输出题是NOJ上很有特色的一类,要求用循环打印三角形、菱形、金字塔、空心矩形等。这类题目的核心不是算法,而是找规律。你需要把图形的每一行拆成“空格数”和“星号数”两个变量,然后找出它们和行号之间的数学关系。

以打印n行等腰三角形为例。第i行(从1开始)的空格数是n-i,星号数是2*i-1。代码框架就是两层循环:外层控制行数,内层先打印空格再打印星号。

for (int i = 1; i <= n; i++) { for (int j = 1; j <= n - i; j++) printf(" "); for (int j = 1; j <= 2 * i - 1; j++) printf("*"); printf("\n"); }

菱形就是在等腰三角形的基础上再加一个倒三角形。空心图形则需要在打印星号的时候判断位置:只有第一列、最后一列、第一行、最后一行才打印星号,其他位置打印空格。

这类题目我踩过最大的坑是行末空格。很多题目要求行末不能有多余空格,但你在循环里统一打印空格和星号,最后一行末尾可能多出空格。解决办法是在打印星号的循环里判断,只有不是最后一个星号才打印后面的空格,或者干脆先构造字符串再输出。

还有一类是打印乘法口诀表、素数表、斐波那契数列前n项。这些题目的循环边界要特别注意。比如斐波那契数列,题目要求输出前n项,n可能是1或者2,你的循环和初始条件要能正确处理这些边界情况。

3.3 数组与字符串处理类

数组和字符串是C语言学习的重点,也是NOJ 100题里分值最高的部分。常见题型包括:数组排序、查找最大值最小值、数组逆置、字符串长度计算、字符串反转、字符串比较、字符统计等。

数组类题目最大的坑是数组越界。NOJ的判题系统对越界访问非常敏感,因为越界可能修改到其他变量的值,导致结果完全不可预测。比如题目说“输入n个整数,n不超过100”,你就必须定义int a[100]或者更大,不能定义int a[n]然后让n从输入读。虽然C99支持变长数组,但NOJ的编译器可能不支持,而且变长数组在栈上分配,n太大可能栈溢出。稳妥的做法是定义一个足够大的固定长度数组,比如int a[1005]。

字符串处理的核心是string.h里的几个函数:strlen求长度、strcpy复制、strcat拼接、strcmp比较、strrev反转(注意strrev不是标准C函数,NOJ的GCC可能不支持,需要自己写反转)。字符串的输入输出也有讲究:scanf("%s",str)遇到空格就停止,gets(str)可以读整行但NOJ可能禁用,fgets(str,sizeof(str),stdin)是更安全的选择。

// 字符串反转(自己实现,不依赖strrev) void reverse_str(char *str) { int len = strlen(str); for (int i = 0; i < len / 2; i++) { char temp = str[i]; str[i] = str[len - 1 - i]; str[len - 1 - i] = temp; } }

字符统计类题目通常要求统计字母、数字、空格、其他字符的个数。注意getchar()和scanf的配合,以及换行符的处理。如果题目要求读一整行包括空格,用fgets最稳妥。

3.4 函数与递归调用类

NOJ的100题里有少量题目要求用函数或递归实现,比如“用递归求阶乘”“用递归求斐波那契数列”“用函数判断素数”。这类题目的判题重点是你的函数接口是否符合题目要求,以及递归的边界条件是否正确。

递归最容易出的问题是栈溢出和重复计算。比如递归求斐波那契数列,fib(n)=fib(n-1)+fib(n-2),当n=40的时候,计算量已经非常大了,NOJ可能判超时。解决办法是用记忆化搜索或者直接改成递推。

// 记忆化搜索求斐波那契 long long memo[100] = {0}; long long fib(int n) { if (n <= 2) return 1; if (memo[n] != 0) return memo[n]; return memo[n] = fib(n - 1) + fib(n - 2); }

函数类题目还要注意参数传递方式。C语言只有值传递,如果你在函数里修改数组,数组会变,因为数组名传过去是首地址。但如果你修改一个int变量,函数外的变量不会变,需要传指针。很多同学写void swap(int a, int b)然后发现交换不了,就是因为没有传指针。

3.5 排序与查找算法类

排序和查找是算法入门的基础,NOJ 100题里大概有十道左右涉及。常见的要求是:给n个数排序后输出、查找某个数在数组中的位置、求中位数、去重后输出等。

排序算法有冒泡排序、选择排序、插入排序、快速排序、归并排序。NOJ的题目数据量通常不大,n最多几百到几千,冒泡和选择排序足够用。但如果你要追求效率,可以用qsort函数,这是C标准库提供的快速排序。

// qsort比较函数(升序) int cmp(const void *a, const void *b) { return (*(int*)a - *(int*)b); } // 调用 qsort(arr, n, sizeof(int), cmp);

查找算法主要是线性查找和二分查找。二分查找要求数组有序,时间复杂度O(log n),比线性查找快很多。但二分查找的边界条件很容易写错,建议用左闭右开的写法:

int binary_search(int arr[], int n, int target) { int left = 0, right = n; while (left < right) { int mid = left + (right - left) / 2; if (arr[mid] == target) return mid; else if (arr[mid] < target) left = mid + 1; else right = mid; } return -1; }

排序类题目还有一个常见要求是“稳定排序”,即相等的元素保持原来的相对顺序。冒泡和插入排序是稳定的,选择和快速排序不稳定。如果题目要求稳定,要么用稳定排序算法,要么在比较函数里加入原始下标的比较。

3.6 简单数学与数论类

数论类题目在NOJ 100题里占比不大,但难度相对较高,包括:判断素数、求最大公约数和最小公倍数、进制转换、求各位数字之和、水仙花数、完数等。

判断素数的核心是试除法,只需要试到sqrt(n)就行。但要注意1不是素数,2是素数。很多同学写循环for(i=2;i<n;i++),当n=2的时候循环不执行,直接返回true,这是对的。但当n=1的时候也会返回true,就错了。所以要先判断n<2的情况。

int is_prime(int n) { if (n < 2) return 0; for (int i = 2; i * i <= n; i++) { if (n % i == 0) return 0; } return 1; }

最大公约数用辗转相除法(欧几里得算法),最小公倍数等于两数之积除以最大公约数。注意两数之积可能溢出int范围,要用long long。

int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); } int lcm(int a, int b) { return a / gcd(a, b) * b; // 先除后乘,防止溢出 }

进制转换类题目通常要求把十进制转成二进制、八进制或十六进制。转二进制可以用除2取余法,转十六进制要注意10-15对应A-F。C语言里可以用printf("%x",n)直接输出十六进制,但题目可能要求大写或者带前缀,需要自己处理。

4. 高频报错信息的根因定位与修复路径

4.1 Compilation Error:从报错行号倒推语法问题

编译错误是最好解决的,因为NOJ会给出具体的错误行号和错误信息。常见的编译错误包括:缺少分号、括号不匹配、变量未声明、头文件缺失、scanf忘记加&。

我整理了一个高频编译错误对照表:

错误信息常见原因修复方法
expected ';' before '}'上一条语句缺分号检查报错行上一行末尾
'xxx' undeclared变量未声明或拼写错误检查变量名大小写
implicit declaration of function 'xxx'缺少头文件加#include <xxx.h>
expected declaration or statement括号不匹配检查花括号是否成对
format '%d' expects 'int'类型不匹配检查printf格式符

有一个很隐蔽的编译错误是中文标点。很多同学在写代码的时候不小心把英文分号;打成了中文分号;,编译器报错但肉眼很难发现。建议在NOJ的编辑器里直接写代码,或者用纯英文输入法。

4.2 Wrong Answer:逻辑错误的系统排查方法

WA是最常见的错误,也是最难排查的。因为NOJ不会告诉你哪组数据错了,只告诉你结果不对。我的排查方法是“三步走”:

第一步,重新读题。逐字读题目描述,特别是输入输出格式、数据范围、边界条件。我至少有三次WA是因为漏看了“多组输入”或者“保留两位小数”。

第二步,构造边界数据。用题目允许的最小值、最大值、特殊值(0、负数、空输入)在本地测试。比如题目说n不超过1000,你就测n=1、n=1000、n=0(如果允许)。很多WA都是边界情况没处理好。

第三步,对拍。如果你有标准答案或者能写出一个暴力解法,可以写一个随机数据生成器,用两个程序跑同样的数据,比较输出。这个方法在算法竞赛里很常用,在NOJ刷题时同样有效。

提示:NOJ的题目通常有“讨论”区,如果实在找不到问题,可以去看看别人的讨论。但不要直接抄代码,而是看别人提到的坑点,然后自己修改。

4.3 Runtime Error:数组越界与除零的快速定位

运行时错误通常表现为程序崩溃或者异常终止。常见原因有:数组越界、除数为零、栈溢出、指针非法访问。

数组越界是最常见的。比如你定义了int a[10],然后访问a[10],这就是越界。C语言不会检查数组边界,越界可能修改其他变量的值,导致结果错误但不一定崩溃。如果崩溃了,反而好定位。建议在本地用-fsanitize=address编译选项来检测越界。

除零错误也很常见。整数除以零会直接崩溃,浮点数除以零会得到inf或nan。在做除法之前,一定要判断除数是否为零。

栈溢出通常发生在递归太深或者局部数组太大。NOJ的栈空间有限,如果你在函数里定义int a[1000000],很可能栈溢出。解决办法是把大数组定义成全局变量,或者用malloc动态分配。

4.4 Time Limit Exceeded:算法复杂度与常数优化

超时说明你的算法效率不够。NOJ的题目通常时间限制是1秒,C语言大概能执行10^8次基本操作。如果你的算法是O(n^2),n=10000的时候就是10^8,刚好卡在边界。n再大一点就超时了。

优化的方向有两个:降低时间复杂度和减少常数。降低复杂度比如把冒泡排序换成快速排序,把线性查找换成二分查找。减少常数比如把i*i<=n写成i<=sqrt(n)(但sqrt本身也有开销),把循环内的printf改成先存到字符串再一次性输出。

还有一个常见的超时原因是输入输出太慢。cin比scanf慢,printf比cout快。在NOJ上用C语言的话,scanf和printf是最快的选择。如果数据量特别大,可以用getchar自己写输入解析。

5. 让代码一次通过的实战习惯与调试技巧

5.1 本地测试的标准化流程

我刷NOJ的时候养成了一个习惯:每道题先在本地建一个文件夹,里面放三个文件:main.c、input.txt、output.txt。input.txt里放样例输入,output.txt里放样例输出。然后用重定向的方式运行程序:./main < input.txt > my_output.txt,再用diff命令比较my_output.txt和output.txt。

这个流程的好处是:第一,你不用每次手动输入样例数据;第二,diff能精确告诉你哪一行不一样,包括空格和换行;第三,你可以把多组测试数据都放在input.txt里,一次性验证多组输入的处理逻辑。

在Windows下可以用fc命令代替diff,或者用VS Code的Compare功能。在NOJ的在线编辑器里,你也可以用“自定义测试”功能,输入自己的测试数据看输出。

5.2 利用NOJ的反馈信息反向定位问题

NOJ的判题结果除了AC、WA、TLE、RE、CE之外,有时候还会给出一些额外信息。比如PE会告诉你“格式错误”,RE会告诉你“运行时错误”,有些题目还会显示“在第X组数据出错”。这些信息都是定位问题的线索。

如果显示“在第X组数据出错”,你可以尝试构造第X组数据。虽然你不知道具体内容,但可以根据题目描述推测。比如前几组是小数据,第X组可能是大数据或者边界数据。

NOJ还有一个“我的提交”页面,可以看到自己每次提交的代码和结果。我建议每次修改代码后都提交一次,并记录修改内容。这样如果改错了,可以回退到之前的版本。不要在一个版本上反复改,改到最后自己都不知道改了哪里。

5.3 代码模板的积累与复用

刷完前二十题之后,你应该开始积累自己的代码模板。比如多组输入的模板、数组排序的模板、素数判断的模板、最大公约数的模板。这些模板在后面的题目里会反复用到,直接复制粘贴能省很多时间。

我当年整理了一个noj_template.c文件,里面包含了常用的头文件、宏定义、输入输出模板、常用函数。每次开新题的时候先复制这个文件,然后在此基础上修改。这样既保证了代码风格统一,又避免了重复写基础代码。

#include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> #define MAXN 1005 int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); } int is_prime(int n) { if (n < 2) return 0; for (int i = 2; i * i <= n; i++) if (n % i == 0) return 0; return 1; } int main() { // 根据题目类型选择输入模式 // 单组:直接scanf // 多组:while(scanf(...)!=EOF) // 先读T:scanf("%d",&T); for(...) return 0; }

注意:模板不是让你无脑抄,而是让你把精力集中在题目的核心逻辑上。每道题的输入输出格式和边界条件都不一样,模板只能帮你处理通用部分。

5.4 从“抄代码”到“独立写”的过渡方法

很多同学刷NOJ的方式是:看到题目,不会,去网上搜代码,抄一遍,提交,AC,下一题。这样刷完100题,遇到新题目还是不会。因为你没有经历“思考-试错-修正”的过程,大脑没有建立解决问题的神经通路。

我的建议是:每道题先自己想15分钟。如果15分钟内没有思路,可以去看别人的代码,但不要直接抄。看懂别人的思路后,关掉代码,自己从头写一遍。写完之后和别人的代码对比,看哪里不一样,为什么不一样。如果自己的写法也能AC,那就用自己的写法。如果自己的写法WA了,分析原因,是逻辑错了还是边界没处理好。

对于特别难的题目,可以允许自己抄一遍,但抄完之后要写注释,解释每一行代码在做什么。第二天再不看代码重新写一遍。这样虽然刷题速度慢,但每道题都是真正掌握了。

6. 从100题到编程能力的迁移:刷完之后你真正获得了什么

刷完西工大NOJ的C程序设计100题,你收获的不仅仅是一个“已完成”的进度条。这100道题覆盖了C语言的所有基础语法和核心编程思想:变量、运算符、分支、循环、数组、字符串、函数、递归、指针、结构体、文件操作。每一类题目都在训练你的一种能力。

基础运算题训练的是你对数据类型和运算符优先级的敏感度。循环图形题训练的是你找规律和拆解问题的能力。数组字符串题训练的是你对内存布局和边界条件的把控。排序查找题训练的是你对算法复杂度的直觉。数论题训练的是你的数学思维和逻辑推理。

更重要的是,NOJ的判题机制逼着你养成严谨的编程习惯。你不能只考虑“正常情况”,还要考虑边界值、异常输入、格式要求。这种严谨性在以后的工作中比任何具体语法都重要。我后来做项目的时候,写接口要处理各种异常情况,写测试要考虑边界数据,这些习惯都是在NOJ上被WA逼出来的。

如果你现在正在刷这套题,遇到卡壳的时候不要急着放弃。把题目描述再读一遍,把输入输出格式再确认一遍,把边界条件再测一遍。大部分问题都能通过这三步解决。实在不行,去讨论区看看别人的思路,但一定要自己动手写一遍。刷题的过程就是不断犯错和修正的过程,每一次WA都是在帮你排除一个错误选项,让你离AC更近一步。

最后分享一个我当年刷题时的小技巧:把每道题的题目编号、题目名称、核心考点、踩过的坑记录在一个Excel表格里。刷完100题之后回头看,你会发现自己踩过的坑其实就那么几类,而你已经全部填平了。这个表格在期末复习的时候也特别有用,老师划重点的时候你直接翻表格就知道每道题考什么。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/25 6:18:17

Chrome WebGL 被禁用?从报错到流畅渲染的完整实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/25 6:16:31

基于SSM的校园一卡通系统的设计与实现

一、项目简介针对传统校园一卡通管理效率低、数据分散、业务办理繁琐等问题&#xff0c;本项目基于SSM框架开发一套校园一卡通管理系统&#xff0c;实现学生消费、签到、余额充值、挂失申请、心理测评等功能的统一管理&#xff0c;同时为管理员提供用户管理、账单管理、基础数据…

作者头像 李华
网站建设 2026/9/25 6:16:28

基于SpringBoot+Vue的校运动会报名管理系统

基于SpringBootVue的校运动会报名管理系统的设计与实现一、项目简介针对传统校园运动会报名统计繁琐、人工整理效率低、数据更新不及时等问题&#xff0c;本项目采用SpringBootMybatisVueMySQL前后端分离架构&#xff0c;开发一套校运动会报名管理系统。系统支持学生在线报名、…

作者头像 李华
网站建设 2026/9/25 6:15:49

Chrome扩展实战:自动抓取Managebac成绩并计算IB总分

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/25 6:15:43

FSK抗干扰仿真:脉冲噪声、窄带干扰与多径衰落联合建模

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/25 6:15:25

Atlas 300V 24G上部署YOLO模型:从环境搭建到性能调优全指南

先回答那个热搜问题&#xff1a;Atlas 300V 24G确实是运算加速卡&#xff0c;而且是一张专门为AI推理设计的加速卡。我在这上面部署YOLO模型前后折腾了小半个月&#xff0c;踩了不少坑&#xff0c;也把一套完整流程跑通了。如果你正准备入手Atlas系列&#xff0c;或者手里已经有…

作者头像 李华