
C/C++每日小练
文章平均质量分 72
通过做趣味题并附上详细源码和注释的方式,锻炼使用C和C++的能力~
大道至简
All in 0&1.
展开
-
C/C++每日小练(八)——蚂蚁
蚂蚁一根长度为L厘米的木棍上有n只蚂蚁,每只蚂蚁要么朝左爬,要么朝右爬,速度为1厘米/秒。当两只蚂蚁相撞时,二者同时掉头(掉头时间忽略不计)。给出每只蚂蚁的初始位置和朝向,计算T秒之后每只蚂蚁的位置。输入格式:输入的第一行为数据组数。每组数据的第一行为3个正整数L、T、n(0输出格式:对于每组数据,输出n行,按输入顺序输出每只蚂蚁的位置和朝向(Turing表示正原创 2014-04-27 00:58:20 · 3593 阅读 · 0 评论 -
C/C++每日小练(七)——墓地雕塑
墓地雕塑题目描述:在一个周长为10000的圆上等距分布着n个雕塑。现在又有m个新雕塑加入(位置可以随意放),希望所有n+m个雕塑在圆周上均匀分布。这就需要移动其中一些原有的雕塑。要求n个雕塑移动的总距离尽量小。输入格式:输入包含若干组数据。每组数据仅一行,包含两个整数n和m(2输出格式:输入仅一行,为最小总距离,精确到0.0001。样例输原创 2014-04-25 21:31:21 · 2174 阅读 · 0 评论 -
C/C++每日小练(六)——分金币
分金币题目描述:圆桌旁坐着n个人,每人有一定数量的金币,金币总数能被n整除。每个人可以给他左右相邻的人一些金币,最终使得每个人的金币数目相等。你的任务时求出被转手的金币数量的最小值。比如,n=4,且4个人的金币数量分别为1,2,5,4时,只需转移4枚金币(第3个人给第2个人两枚金币,第2个人和第4个人分别给第1个人一枚金币)即可实现每个人手中的金币数目相等。输入格式:原创 2014-04-24 17:05:36 · 3439 阅读 · 0 评论 -
C/C++每日小练(五)——突击战
突击战你有n个部下,每个部下需要完成一项任务。第i个部下需要你花Bi分钟交代任务,然后他会独立地、无间断地执行Ji分钟后完成任务。你需要选择交代任务的顺序,使得所有任务尽早执行完毕(即最后一个执行完的任务应尽早结束)。注意,不能同时给两个部下交代任务,但部下们可以同时执行他们各自的任务。输入格式:输入包含多组数据,每组数据的第一行为部下的个数N(1输出格式:对于每组数据原创 2014-04-20 11:25:36 · 2046 阅读 · 0 评论 -
C语言每日小练(四)——勇者斗恶龙
勇者斗恶龙你的王国里有一条n个头的恶龙,你希望雇佣一些骑士把它杀死(砍掉所有的头)。村里有m个骑士可以雇佣,一个能力值为x的骑士可以砍掉恶龙一个致敬不超过x的头,且需要支付x个金币。如何雇佣骑士才能砍掉恶龙的所有头,且需要支付的金币最少?注意,一个骑士只能砍一个头(且不能被雇佣两次)。输入格式:输入包含多组数据。每组数据的第一行为正整数n和m(1输出格式:对于每组数据,原创 2014-04-19 10:05:42 · 3543 阅读 · 0 评论 -
C语言每日小练(三)——竖式问题
例:找出所有形如abc*de(三位数乘以两位数,均非零。)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合。输入数字集合(相邻数字之间没有空格),输出所有竖式。每个竖式前应有编号,之后应有一个空行。最后输出解的总数。具体格式见样例输出(为了便于观察,竖式中的空格改用小数点显示,但你的程序应该输出空格,而非小数点)。样例输入:2357样例输出:..775X..33原创 2014-04-10 22:43:11 · 3786 阅读 · 1 评论 -
C语言每日小练(三)——abc排列问题
例:用户输入:a,b,c输出: a,b,c,ab,ac,bc,abc解:此程序应不仅适用于3个字符的情况~运用递归即可解决:法1:#include#include#define MAX 100int top = 0; //缓冲区指针。int count = 1; //统计组合数。void search(char *a, char *b, int start)原创 2014-04-10 22:04:24 · 4109 阅读 · 0 评论 -
C语言每日小练(二)——开灯问题
开灯问题~原创 2014-04-09 07:28:00 · 8759 阅读 · 0 评论 -
C语言每日小练(二)——蛇形填数
蛇形填数问题~原创 2014-04-09 20:49:48 · 5581 阅读 · 0 评论 -
C语言每日小练(一)——n!问题
例:输入n,计算S = 1!+2!+3!+...+n!的末6位。n样例输入:10样例输出:37913解:法(1)直接模拟阶乘求和过程,代码如下:#include#define MOD 1000000int main(){ int i, j, n, m, S = 0; scanf("%d", &n); for(i = 1; i <= n; i++)原创 2014-04-08 19:09:13 · 1966 阅读 · 0 评论 -
C语言每日小练(一)——3n+1问题
例:3n+1问题对于任意大于1的自然数n,若n为奇数,则将n变为3n+1,否则变为n的一半。经过若干次变换,一定会使n变为1。例如3-》10-》5-》16-》8-》4-》2-》1。输入n,输出变换的次数。n不大于10的九次幂。样例输入:3样例输出:7解:直接模拟过程即可,下面是代码:#includeint main(){ int n, count = 0;原创 2014-04-08 17:48:34 · 9567 阅读 · 0 评论 -
C语言每日小练(一)——7744问题
例:aabb输出所有形如aabb的四位完全平方数(前两位数字相等、后两位数字相等)。解:法(1):(a)构造aabb形式的数;(b)判断是否为完全平方数。代码:#include#includeint main(){ int a, b, n; double m; for(a = 1; a <= 9; a++) { for(b原创 2014-04-08 16:52:13 · 3549 阅读 · 0 评论 -
sprintf函数的使用
这几天总遇到sprintf,下面自己来小小地总结下~srpintf()函数的功能非常强大:效率比一些字符串操作函数要高;而且更具灵活性;可以将想要的结果输出到指定的字符串中,也可作为缓冲区,而printf只能输出到命令行上~头文件:stdio.h函数功能:格式化字符串,将格式化的数据写入字符串中。函数原型:int sprintf(char *buffer, const char *原创 2014-04-05 19:25:41 · 15306 阅读 · 0 评论 -
实现BFS之“营救”
广度优先遍历(Breadth First Search,BFS)是一个分层的搜索过程,没有回退过程,是非递归的。DFS与BFS的小秘密:1、深度优先搜索算法的思路很简单,比较好理解,但得到的解不是最优的;而广度优先搜索则恰恰相反;2、如果节点有无穷多个,深度优先搜索算法在某处分支可以无限搜索下去却找不到解,这时我们可以采用有界深度优先搜索~原创 2014-04-03 15:38:33 · 2261 阅读 · 1 评论 -
实现DFS之“农田灌溉”
这也是一道利用了DFS的题目,先说下我的思路:用一个二维数组记录每个字母所代表的含义(管道方向),用另一个二维数组记录4个方向的变换坐标;随后利用经典的DFS递归遍历即可~(还要注意在方向的处理上......原创 2014-04-02 19:38:29 · 2092 阅读 · 0 评论 -
实现DFS之“油田”
“油田”问题是一个比较经典的体现DFS思想的题目,经过学习,对DFS也有了一点理解,下面介绍下这个题目~题目来源:Mid-Central USA 1997,ZOJ1709,POJ1562题目描述:GeoSurvComp地质探测公司负责探测地下油田。每次GeoSurvComp公司都是在一块长方形的土地上来探测油田。在探测时,他们把这块土地用网格分成若干个小块,然后逐个分析每块原创 2014-04-01 22:57:59 · 4024 阅读 · 2 评论 -
实现DFS之“骨头的诱惑”
深度优先搜索(DFS)是一个递归过程,有回退过程。下面是一道OJ上的题目,借此来实现下DFS~题目来源:Zhejiang Provincial Programming Contest 2004,ZOJ2110题目描述:一只小狗在一个古老的迷宫里找到一根骨头,当它叼起骨头时,迷宫开始颤抖,它感觉到地面开始下沉。它才明白骨头是一个陷阱,它拼命地试着逃出迷宫。迷宫是一原创 2014-04-01 20:42:07 · 2756 阅读 · 1 评论 -
排序初解(一)——各种排序的性能分析表
在待排序的文件中,若存在多个关键字相同的记录,经过排序后这些具有相同关键字的记录之间的相对次序保持不变,该排序方法是稳定的;反之,若发生变化,则是不稳定的。如下表:原创 2014-03-29 11:56:53 · 1326 阅读 · 0 评论 -
链表初解(四)——队列的入队和出队
自己复习了一下简单队列的基本操作,其中要注意的是队头和队尾要始终保持位置正确~还是老习惯,上代码+注释啦~Code:#includeusing namespace std;typedef struct node{ int data; struct node *next;}node;//定义指针结构typedef struct queue{ node *first, *原创 2014-03-29 10:47:30 · 4952 阅读 · 0 评论 -
链表初解(三)——约瑟夫环之循环链表实现
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。现编写循环链表程序来实现约瑟夫环问题并输出每次出列的结果~用循环链表模拟此过程即可:1、建表;2、模拟出列规则。下面还是老套路,直接贴上源码+注释~原创 2014-03-29 01:54:23 · 3596 阅读 · 0 评论 -
链表初解(二)——双链表的创建、删除、插入
下面是基本的双链表操作,由于双链表有两个方向,所以在删除和插入节点时,可以节省一个指针,只用一个链表上的指针和一个待操作的指针即可完成插入和删除;同时也要注意在编写双链表时对情况的判断要仔细,否则很容易出错~#includeusing namespace std;typedef struct student{ int data; struct student *next;原创 2014-03-28 23:49:20 · 1756 阅读 · 0 评论 -
链表初解(一)——单链表的创建、删除、插入、测长、排序、逆置
由于考试需要,复习一下单链表的各种常见操作,直接上代码+注释,需要的可以参考下哈~Code:#includeusing namespace std;typedef struct student{ int data; struct student *next;}node;//创建单链表node *create(){ node *head, *p, *s; int x原创 2014-03-28 21:59:15 · 1987 阅读 · 3 评论