随笔分类 - Z技术(Arithmetic)
摘要:小续 最近很多人都在问我数据结构和算法的相关问题,对于初学者,貌似听到算法,数据结构什么的,都觉得是比较高深的东西,其实它们并没有想象中的难,只是你还没有一个整体上的把握,还没有习惯站在整体上去思考问题。算法是灵魂,数据结构是包装,语言只是工具,学什么语言并不重要,重要的是思想。这也是如鹏的理念:一通百通。 去年比赛的时候,我看过一些算法,也收集了一些自认为比较有代表性,优秀的算法,在这里整理出来给大家分享一下,希望能够帮助到大家(我也是菜鸟,高手勿喷)整理清单如下:算法的艺术(一):http://infohacker.blog.51cto.com/6751239/1171334算法的艺术..
阅读全文
摘要:求解线性方程 用高斯(Guass)消去法求解N阶线性方程组Ax=B。 实例解析: 高斯消去法解线性代数方程的基本原理如下。 对于线性方程组: 其中系数矩阵为A,未知量为X,值向量为B。计算的方法分为两步进行。 第1步,消去过程,对于k从0到n -2做以下3步。 从系数矩阵A的第k行、第k列开始的右下角子阵中选取绝对值最大的元素,并通过行交换与列交换把它交换到主元素(即对角线元素)的位置上。 归一法: j=k+1,…..,n-1 消去: j=k+1,…..,n-1 第2步,回代过程。 i=n-2,…..,1,0 最后对解向量中的元素顺序进行...
阅读全文
摘要:小续 以下是我收集的一些有趣的计算实例,希望能够提高读者的编程水平及分析问题/解决问题的能力---------------------------------------------马克思手稿中的数学题 马克思手稿中有一道趣味数学题:有30个人,其中有男人、女人和小孩,在一家饭馆吃饭共花了50先令。若每个男人花3先令,每个女人花2先令,每个小孩花1先令。问男人、女人和小孩各有几人? 实例解析: 设x,y,z分别代表男人、女人和小孩的人数。按题目要求,可得到下面方程: x + y + z = 30 (1) 3x + 2y + z ...
阅读全文
摘要:多项式的表示和计算 设计一种用单链表存储多项式的结构,每个结点存储一项的系数和指数(类型都是int),并编写一个产生多项式链表的函数和一个实现两个多项式相加的函数。 实例解析: 用单链表存储每一项的数据,则链表结点的结构应含有三个成员:系数、指数和后继的指针。定义结构如下:struct Node{ int coef; int power; struct Node *link;}; 用链表存储多项式时,若系数不为0,则结点存在,若系数为0,则不保留该结点。要注意的是:做加法运算时,因有些结点不存在,所以要比较两个结点所存的次数是否一致。 主要程序代码:#inclu...
阅读全文
摘要:小续 算法只是一种思想,在很大程度上,其实现都依赖于数据结构,所以这里提取出一些典型的算法和数据结构,包括排序以及链表/堆栈/队列等结构的操作------------------------------------------------------冒泡法排序 数组中有N个整数,用冒泡法将他们从小到大(或从大到小)排序。 实例解析: 排序是非常重要且很常用的一种操作,有冒泡排序、选择排序、插入排序、希尔排序、快速排序、堆排序等多种方法。这里我们先简单介绍前三种排序算法和代码的实现,其余算法将在后续课程《数据结构》中学习到。 冒泡法排序是C语言教材中已经介绍过的排序方法,与其他排序...
阅读全文
摘要:利用位运算求整数的原码或补码 利用位运算求任意整数的原码或补码。 实例解析: 整数在内存中本来就是用补码存放的,若要求出补码,只需求出内存中的每一位二进制数即可。而原码,若是负数,则需要将补码减1然后取反(最高位不取反)。 程序代码:#include "stdio.h"int main(){int n, i; char k; clrscr(); scanf("%d",&n); printf("要转成什么?\n"); printf("1、原码\n"); printf("2、补码\n");
阅读全文
摘要:打印魔方阵 一个奇数阶(设为n阶)的方阵,将1、2、3……n2填入方阵中,使每行、每列数据之和都相等,这样的方阵便是魔方阵。 实例解析: 填写魔方阵有一个固定的方法: (1)1总是位于第一行的中间。 (2)从2开始,下一个数总是位于上一个数的右上方的空格内,如5应该位于4的右上方。 (3)若右上方超出表格的右边界,则数字填入到第一列,行数不变。图16-1中的3和8都是这种情况。 若右上方超出上边界,则数字填入最后一行,列数不变。图16-1中2和9都是这种情况。 若按上面规则推算出来的位置已经有数字存在,则下一个数位于上一个数的下方空格内。例如:本来4应该填入3的右上方,但3的右上...
阅读全文
摘要:火车托运费的计算 设乘坐火车托运行李时按下列式子收费: 0 (040) 编一个程序用来计算应交金额。 实例解析: 这是第三章中的一个例题(当时是用switch处理的),是一个选择结构的实例,收费情况共分三种。 本题可以采用三种方法来编程: (1) 用三个单独的if语句,每个if语句处理一种情况; (2) 用嵌套的if语句处理,需两个if语句; (3) 用switch语句。方法一:用单独的if语句#include int main(){int x, y; scanf(“%d”, &x);if(x 20 && x 40) ...
阅读全文
浙公网安备 33010602011771号