作为一个计算机专业的学生 偶然听到暑期留校的老师提及该应用可以记录自己的一些学习经历 于是我决定创建一个属于自己的计算机学习经历 这应该比手抄记录 或者单独记录在备忘录要方便灵活的多 这里竟然还可以插入代码 真是个不错的应用 而且用户很多 有很多高手 值得我去学习提升自己的水平过完这个暑假我就已经大二了 在这一年里我也不知道我自己在干嘛 上了一堆没用的课 在课上刷了一堆没有用的视频 在专业上也没有学好 只考了40多分 要不是老师捞 把平时分拉满 我才及格 这一年 我玩也没玩到 女朋友也没找到 我从初次高考的300多分 到500多分 从初进学校的意气风发 至今沦落至此 我没有努力吗 似乎也不能这样说 也许是我的努力少了一个东西 是 坚持 天赋我不知道我有么有 但我知道我只有坚持着努力才会发掘出自己的天赋 有些话我无法一次性说完 说完了也没有意思 没有去尝试还是少说大话 所以在接下来的日子我会持续更新我的博客 也许无人问津 也许会有形形色色的人参观 不论你们说什么 我希望我都会坚持着走自己的道路 采纳一些好的建议 接纳所有的诋毁和辱骂再去找回当初的自己我现在只学了C语言所以最近几篇只会更新C语言的题目 将一些我认为对一些初学者有用 并且有兴趣了解的一些题目挂在这上面 如果代码或者思路不对的话 大佬们都可以在评论区或私信指导也许没人看废话不多说那就开始吧 我已经上了两天课了 信息量爆炸了 上题1.求超大数的阶乘 要使用数组去解决 卧槽 题目找不到了 那我也凭自己的记忆还原一下题目题目输入一个 n 求 从 1 到 n 的阶乘和 差不多就是求 123.........n! 的值开始解题#includestdio.h #define MAX 10001 void mul(int a[],int n) { int carry0; for(int i0;iMAX;i) { int tempa[i]*ncarry; a[i]temp%10; carrytemp/10; } } void add(int b[],int a[]) { int carry0; for(int i0;iMAX;i) { int tempa[i]b[i]carry; b[i]temp%10; carrytemp/10; } } void prin_b(int b[]) { int iMAX-1; while(b[i]0) i--; for(;i0;i--) { printf(%d,b[i]); } } int main() { int n; scanf(%d,n); getchar(); int a[MAX]{0}; int b[MAX]{0}; a[0]1; for(int i1;in;i) { mul(a,i); add(b,a); } prin_b(b); return 0; }ok啊 也是费了九牛二虎之力完成 先前一直输出不了 我说哪里有问题 结果发现是add函数的 b[ ] 写成了 a[ ] 了 服了 又浪费了点时间 开始下一题吧 想出用这种方法的人也算是个天才吧2.学了这么久 还在用冒泡去排序 自己还是太菜了 先前也学不懂 昨天学了一个qsort 非常不错题目将读入的 N 个数从小到大排序后输出题目很简单 但是如果用冒泡会超时 没办法又要学新知识了开始解题#includestdio.h #includestdlib.h #define MAX 1001 int compare(const void* a,const void* b) { return (*(int *)a-*(int *)b); } int main() { int n; scanf(%d,n); int a[MAX]; for(int i0;in;i) { scanf(%d,a[i]); } qsort(a,n,sizeof(int),compare); for(int i0;in;i) { printf(%d ,a[i]); } return 0; }又花了很多时间 发明这个方法的比上面那个还要聪明 根本无法理解这方法的原理 去b站上看也只知道一个大概 有没有哪个大佬可以解释清楚啊3.本来想着继续写下一道题的 结果突然想起一个听说更快的排序 快排吧 学了一下 ............学了30 40 分钟 差不多能看懂 还是太笨了 直接开始上代码吧 而且我还看到有几种方法的快排 现在只学会了 hoare 法 我还看到了挖坑法 一般使用快排都是 hoare 法 所以我把 4. 留给挖坑 先用 hoare 法写一个例子吧#includestdio.h #includestdlib.h void swap(int *q,int *p) { int temp*q; *q*p; *ptemp; } void quick_sort(int a[],int start,int end) { if(endstart) return; int leftstart; int rightend; int keystart; while(rightleft) { while(rightlefta[right]a[key]) right--; while(rightlefta[left]a[key]) left; swap(a[left],a[right]); } swap(a[key],a[left]); quick_sort(a,start,left-1); quick_sort(a,left1,end); } int main() { int n; scanf(%d,n); int a[1001]; for(int i0;in;i) { scanf(%d,a[i]); } quick_sort(a,0,n-1); for(int i0;in;i) { printf(%d ,a[i]); } return 0; }差不多搞懂了 诶 真累 ........隔了一天 早上也写了一道要用快排的题 发现有点问题 在 while 内循环的两个 while 中 while(rightlefta[right]a[key]) right--; while(rightlefta[left]a[key]) left; 应该把后面那个 a[left] a[right] 与 a[key]的关系补充一个等于号4.挖坑法快排隔天补充#includestdio.h #includestdlib.h void quicksort(int a[],int start,int end) { if(startend) return; int leftstart,rightend; int keya[left]; int holeleft; while(leftright) { while(leftrighta[right]key) right--; a[hole]a[right]; holeright; while(leftrighta[left]key) left; a[hole]a[left]; holeleft; } a[hole]key; quicksort(a,hole1,end); quicksort(a,start,hole-1); } int main() { int n; scanf(%d,n); int a[1001]; for(int i0;in;i) { scanf(%d,a[i]); } quicksort(a,0,n-1); for(int i0;in;i) { printf(%d ,a[i]); } return 0; }隔天晚上写完这个感悟还是有一点的这个挖坑法我认为更适合初学快排者 尤其是线下没有老师教的情况下 我看一个叫做花想云博主的图片教学 我认为这个从理解方面来说要比 hoare 好理解 但是我认为 hoare 比这个的思路要快捷一点 所以我以后应该都是用 hoare 来实现快排5.素数筛法 平时算素数空间大直接gg 所以又得学那个埃氏筛素数法吧题目求 1,2,⋯,N 中素数的个数开始解题#includestdio.h #includestdlib.h int main() { int n; scanf(%d,n); int *a(int *)malloc(sizeof(int)*(n1)); for(int i0;in;i) { a[i]1; } a[0]a[1]0; for(int i2;in;i) { if(a[i]1) { for(int ji*i;jn;ji) { a[j]0; } } } int sum0; for(int i0;in;i) { if(a[i]1) sum; } printf(%d,sum); free(a); return 0; }6.本来是没有 6 的 刚开始写这道题的时候觉得很容易 结果发现还是超空间了 这种变态竞赛题根本就不能用正常人的第一思维去解题 老天再赐予我一次天赋吧 哈哈哈哈哈哈这就是题目了 有没有大佬可以给出更牛的解 我这道题参考了ai噢解题代码#includestdio.h #includestdlib.h #includestring.h int compare(const void *a,const void *b) { char ab[21],ba[21]; sprintf(ab,%s%s,(char *)a,(char *)b); sprintf(ba,%s%s,(char *)b,(char *)a); return strcmp(ba,ab); } int main() { int n; scanf(%d,n); char a[20][10]; for(int i0;in;i) { scanf(%s,a[i]); } qsort(a,n,sizeof(a[0]),compare); if(a[0][0]0) printf(0); else { for(int i0;in;i) { printf(%s,a[i]); } } return 0; }这解题思路使用快排排列字符串转化为数的解 我也差不多 只是用的冒泡就不行了 可是 n 最大不也才 20 吗这一期的C语言练习就结束了 过几天又会发 主要是明天早上就有个考试 看看这几天学到了啥吧 也欢迎大家在底下评论 谢谢