博文
迷宫搜索(2007-06-15 09:14:00)
摘要:/************************************************************************\ 迷宫路径搜索的过程显示,编译环境 : TC
Author : Deng Lanzhong / 江南孤峰 Time : 07--6--14 Link me : Email: lingdlz@163.com qq: 403324669\************************************************************************/
#include <stdio.h>#include <graphics.h>#include <time.h>#include <setjmp.h>
#define MAZE_X 15 /* 迷宫宽度 */#define MAZE_Y 10 /* 迷宫高度 */
char maze[MAZE_Y+2][MAZE_X+2]; /* 定义迷宫 */int maze_x_s = (640 - MAZE_X * 20) / 2; /* 迷宫起始横坐标 */int maze_y_s = (480 - MAZE_Y * 20)/2-40; /* 迷宫起始纵坐标 */int search_result = 1; /* 迷宫搜索结果 */jmp_buf jumper; /* 非局部跳转 */
/* 创建随机迷宫 */void CreateRandMaze(void){ int i,j; for(i = 0; i &l......
打印杨辉三角(2007-06-02 12:26:00)
摘要:问题描述
还记得中学时候学过的杨辉三角吗?具体的定义这里不再描述,你可以参考以下的图形: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1
输入
输入数据包含多个测试实例,每个测试实例的输入只包含一个正整数n(1<=n<=30),表示将要输出的
杨辉三角的层数。
输出
对应于每一个输入,请输出相应层数的杨辉三角,每一层的整数之间用一个空格隔开,每一个杨辉三角后
面加一个空行。
输入样例
2 3
输出样例
11 1
11 11 2 1
#include <stdio.h>#include <string.h>int main(){ int n,a[32],b[32],i,j; while(scanf("%d",&n)!=EOF){ a[1] = a[2] = b[1] = b[2] = 1; printf("1\n"); for(i = 2; i <= n; i++){ printf("1 "); for(j = 2; j < i; j++){ b[j] = a[j-1]+a[j]; printf("%d ",b[j]); } b[j] = 1; memcpy(a,b,sizeof(int)*(n+2)); printf("1\n"); } printf("\n"); } return 0;}......
具有破坏性的C程序(2007-03-28 11:41:00)
摘要:论坛上一网友出的,原帖:
请问大家如何编一个一发现D盘的exe文件就自动删除的程序??做这个东西不是为了破坏,而是为了学校机房的安全,不让学生在下面搞破坏,本人对编程一无所知,哪位好心人士能提供代码或者程序.谢谢
/* 自己以前写过类似的程序,所以发了十几分钟写了个基本上满足LZ 需要的程序.但是真正用于机房还差点,首先应该有个计时器,隔段 时间扫描一遍D盘而不是不停的扫描,其次应该驻留在内存自动运行 而不是放在谁都可以关闭它的地方。不过要我实现所有的这些功能 呵呵…… 总要意思一下吧 ! 运行该程序D盘下的所有系统文件,系统目录以及隐藏文件,隐藏目录 只读文件,只读目录会被修改。 注意请在调试时创建临时目录,否则如果D盘下的所有.exe文件被删 除与作者无关 ,使用该程序造成的一切损失与作者无关 。 正常退出该程序请输入 e
编译环境 VC++6.0*/#include <stdio.h>#include <io.h>#include <string.h>#include <direct.h>#include <conio.h>#include <stdlib.h>#define FILE_ATTRIBUTE_DIRECTORY 0x00000010#define FILE_ATTRIBUTE_FILE 0x00000020void DeleteFile(char *fname){ char *p;  ......
有趣的数阵(2007-03-27 19:58:00)
摘要:编程爱好者 论坛上某个网友出的,原帖如下:
请大家帮我仔细的提示一下这个回路的题目怎么做?怎样打出如下图案:1 2 3 4 5 614 15 16 17 18 713 12 11 10 9 8
解题思路:很容易的我们发现这个数阵很有规律,假如我们有一个二维数组 a[i][j],如果我们能把这些数按上面那样填进数组输出就不成问 题了,我们发现第一行依次向右增加(从1开始),我们设个变量k 首先设 k = 1,k按1增长填进数组,数组下标的规律是首先 j++;然后 方向 变为向下即 i ++; 之后方向向左,即 i --, j --;随后向上即 i --;最后又回到出发的方向,向右 ^_^.如果填数的过程中我们知道 什么时候该向哪个方向走就好了,为了实现这个目的,我们可以将数组 初始化为 0 ,并且在外围增加一层墙(设值为 1),遇到墙我们就回退 因为我们知道方向变化的规律,我们按这个规律,遇到值为 0 的我们就 ......
求子集(2007-03-20 11:25:00)
摘要:/***********************************************************************************\ 功 能: 求整数集合的子集 输入说明: 按提示输入数据 输出说明: 以集合形式输出子集 测试数据如下: Enter the number of gather:4Enter gather's each element:1 2 3 4
The sub gather as followed:{}{1}{2}{3}{4}{2,1}{3,1}{4,1}{3,2}{4,2}{4,3}{3,2,1}{4,2,1}{4,3,1}{4,3,2}{4,3,2,1}Press any key to continue 算法说明: 对子集的寻找按照子集元素个数递增方式,用堆栈 语 言: 非标准 C 编译环境:VC ++ 6.0 Author : 江南孤峰 Time :2006--11--29
独学而无友,则孤陋而寡闻 编程爱好者群 : 28011342 \************************************************************************************/
#include <stdio.h>#include <mal......
表达式检验(2007-03-20 11:16:00)
摘要:
/***********************************************************************************\ 功 能: 检验含括号的四则运算表达式的合法性 输入说明: 按提示输入表达式 ctrl+c 结束输入
输出说明: 如果表达式合法则输出 yes ,否则输出 no 测试数据如下: press Ctrl+c to exit !(((3+4*3+(333+4)+(33*34))/3)+4)yespress Ctrl+c to exit !()nopress Ctrl+c to exit !3+4-(3*3)yespress Ctrl+c to exit !8((nopress Ctrl+c to exit !8()nopress Ctrl+c to exit !3=3nopress Ctrl+c to exit ! 算法说明: 象拨竹笋一样从最内层括号开始,注意将括号改为数字不改变表达式的合法性 寻找最内层括号:找表达式最左的')' ,找表达式最右并且在前面所找')'左边 的'('这对括号就是最内层括号,检验这两个位置的前后是否合法,例如对 '(' &nb......
利用 dos 中断写密码程序(2007-03-20 10:46:00)
摘要:/* 编译器 TC */
#include <stdio.h>#include <dos.h>
void main(void){ union REGS inregs,outregs; int index; char password[255];
do{ printf("Enter password:"); index = 0; do{ inregs.h.ah = 8; /* int 21h 功能 8 键盘输入无回显 */ intdos(&inregs,&outregs); if(outregs.h.al == '\r') password[index] = NULL; else if(outregs.h.al == '\b'){ if(index){ index --; printf("\b \b"); } else printf("\a"); continue; } else{ printf("*"); password[index] = outregs.h.al; } if(index == 255){ password[index-1] = NULL; break; } if(!password[index]) break; else index ++; }wh......
分治法(2007-03-20 10:37:00)
摘要: /* 分治法简介 任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。问题的规模越小,越容易直接求解,解题所需的计算时间也越少。例如,对于n个元素的排序问题,当n=1时,不需任何计算。n=2时,只要作一次比较即可排好序。n=3时只要作3次比较即可,…。而当n较大时,问题就不那么容易处理了。要想直接解决一个规模较大的问题,有时是相当困难的。
分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。
分治策略是:对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。这种算法设计策略叫做分治法。
如果原问题可分割成k个子问题,1<k≤n ,且这些子问题都可解并可利用这些子问题的解求出原问题的解,那么这种分治法就是可行的。由分治法产生的子问题往往是原问题的较小模式,这就为使用递归技术提供了方便。在这种情况下,反复应用分治手段,可以使子问题与原问题类型一致而其规模却不断缩小,最终使子问题缩小到很容易直接求出其解。这自然导致递归过程的产生。分治与递归像一对孪生兄弟,经常同时应用在算法设计之中,并由此产生许多高效算法。
分治法所能解决的问题一般具有以下几个特征:1) 该问题的规模缩小到一定的程度就可以容易地解决2) 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子 结构性质。 3) 利用该问题分解出的子问题的解可以合并为该问题的解; 4) 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公 共的子子问题。
上述的第一条特征是绝大多数问题都可以满足的,因为问题的计算复杂性一般是随着问题规模的增加而增加;第二条特征是应用分治法的前提它也是大多数问题可以满足的,此特征反映了递归思想的应用;第三条特征是关键,能否利用分治法......
用C绘制正弦函数图(2007-03-20 10:19:00)
摘要:/* 好久没上博客了,最近在学 STL 和 MFC 他们让我有点手忙脚乱尤其是 MFC ,以前用 C 写界面发好几个小时写出来的也不能令人满意,而用 MFC 发不到一分钟就可以弄出一个大家都熟悉的东西。C 不是用来弄界面的,C是用来写高效程序,是用来写 MFC搞不出来的东西的,我应该这样想。学了一年多的面向过程方法现在忽然要转到面向对象真的有点不自然。本来不想再搞C,一心一意用面向对象解决问题,这学期开了计算机图形学,于是我又弄TC了。象放不下旧情人,我真的放不下C,喜欢她的灵活,喜欢她的指针,外面都是招 JAVA / C++ / C# / .NET …… 一大堆令人眼发撩乱的东西,也许C的时代过去了,不过我放不下,我仍将继续学C,学C更高级的东西,甚至学点汇编,搞混合编程。不为饭碗,不问将来 ,只因为自己喜欢……
欢迎加入 编程爱好者群 : 28011342 AUTHOR : 江南孤峰 以下程序在 TC 下编译,在屏幕上绘制正弦曲线*/#include <stdio.h>#include <math.h>#include <conio.h>#include <graphics.h>
void DrawCoordinate(void){ char text[6];
outtextxy(50,50,"Draw math function sin as followed : "); line(100,100,100,380); line(99,100,99,380); sprintf(text,"%c",24); /* 向上的箭头 */ outtextxy(96,100,text); strcpy(text,"y"); outtextxy(86,100,text);
line(5,240,560,240); sprintf(text,"%c",26); /* 向右......
