博文

论坛文章:基础算法、技巧、调试概要(2008-01-13 23:43:00)

摘要:// ************************************************************ //// 本文源自飞燕之家在线测评论坛http://yzfy.org/,转载清注明出处 //// ************************************************************ //基础算法题目精简集合 题目相对来说简要了一些,算是有代表性了,各方面都有题目偶不希望像别的帖子那样像为了凑数般弄够100题,相反这里不过二三十。前六章均为算法基础入门必会解答的题目,也就是若当中有任何一题,您无法给出正确解答,就不算有算法基础(带星的题目例外),并且这里不提供基础题解答,若你实在需要,请自行查资料或者找人帮你。下文假定阅读者具有良好的小学数学基础,以及懂得使用C/C++/Pascal语言当中的任何一种,尽管你会其它的语言也行,但算法描述方面以及代码效率还是推荐以上三种。如果以下算法基础的题目您学习了很久也无法正确解决的话,那么本人不建议你继续学习编程(基础题不用STL库独立解答出才算是会)。 第一章。循环控制1.输入一个奇数n,输出对角线长为n的实心或者空心的菱形图案  如当n=5时,有:    *   ***  *****   ***    *  详细可参阅http://yzfy.org/bbs/viewthread.php?tid=352.输入一个奇数n,构造并输出一个n阶等和幻方,  即每一行每一列和两对角线上的n个数的和相等  如当n=5时,有(构造方法请自行搜索或者观察下表):  03 16 09 22 15  20 08 21 14 02  07 25 13 01 19  24 12 05 18 06  11 04 17 10 233.输入一个1e9以内的整数n和k(2<=k<=36),输出相应的k进制数。  相关题目请参阅http://yzfy.org/bbs/viewthread.php?tid=4744.输入一个整数n(2<=n<=1e9),判断它是不是......

阅读全文(8136) | 评论:5

有重复元素的全排列输出(2007-04-07 15:01:00)

摘要:例如,输入aabc,按字典顺序输出:aabcaacbabacabcaacabacbabaacbacabcaacaabcabacbaa偶的代码如下:#include <stdio.h>int main(){    long nt,n1,n2,nLen;    char cIn[100],ct;    long nNum[100]={0};    scanf("%s",cIn); //输入字符串    {        char *pc=cIn,*pc2;        for(;*pc;pc++)for(pc2=pc+1;*pc2;pc2++)//排序,按ASCII            if(*pc>*pc2)ct=*pc,*pc=*pc2,*pc2=ct;        nLen=pc-cIn;        while(nNum[nLen]==0)        {            char cT[100],cOut[100]={0},*pcOut=cOut;            for(n1=0;n1<=nLen;n1......

阅读全文(7008) | 评论:14

超高精度算阶乘(快速)(2007-03-31 00:49:00)

摘要://以10进制输出结果,本程序计算1000!用时不到50ms#include <stdio.h>#include <conio.h>#include <time.h>  //用于计时#define MaxNum        10000  //阶乘最大的数(最高位数)//如果要算更大的n!请自行修改此值void LargeNumberTimes(long *num,long &nMax,long nTimes){    long z1,z2,z3=0;    for(z1=0;z1<=nMax;z1++)    {        if((z2=num[z1]*nTimes+z3)>=10000)        {            z3=z2/10000,z2%=10000;            if(z1==nMax)nMax++;        }        else z3=0;        num[z1]=z2;    }}int main(){//雨中飞燕之作; &nbs......

阅读全文(7571) | 评论:24

数字迷通解程序(2007-03-29 08:35:00)

摘要:#include <stdio.h>#include <conio.h>int main(){    int n1,n2,n3,n[11]={9,8,7,6,5,4,3,2,1,0,0},ns=0;    while(n[10]==0)    {        if(n[9]<=1) //这部分按你题目需要修改        { //现在的代码计算的是a+bc+def=ghij            n1=n[2]*10+n[1];n2=n[5]*100+n[4]*10+n[3];            n3=n[9]*1000+n[8]*100+n[7]*10+n[6];            if(n[0]+n1+n2==n3)ns++,printf("%d + %d + %03d = %04d\n",n[0],n1,n2,n3);        }else break; //这里n[9]>1不可能再有解        n1=0;n[n1]++;        while(n1>=0) &n......

阅读全文(3530) | 评论:5

列举完全数快速算法(瞬间列出前7个)(2007-03-25 20:33:00)

摘要:#include <stdio.h>#include <conio.h>#include <math.h>int main(){    for(long n=2,z1=3,z2,zq;n<=20;z1=(long)pow(2,++n)-1){        for(z2=2,zq=(long)sqrt(z1);z2<=zq;z2++)if(z1%z2==0)break;        if(z2>zq)printf("%.lf\n",(pow(2,n-1)*z1));    }    getch();return 0;}......

阅读全文(4944) | 评论:11

简单去冗余解的24点解法(2007-03-25 20:11:00)

摘要:本程序并不能去掉全部冗余解,只是去掉一部分,并且写的尽可能简单,仅供大家参考。(注意:直接复制本段代码是无法正常运行的,除非手动重写-,-嘿嘿)#include <stdio.h> #define forT        for(t2=t1;t2<3;t2++)t[t2]=t[t2+1];#define GetNum(n)    {if(t1>0 && t[t1-1]==t[t1])continue;n=t[t1];forT}#define isTrue        if(23.9999<total && total<24.0001)#define argment        n1,GetSym(sym1),n2,GetSym(sym2),n3,GetSym(sym3),n4#define pt(str)        printf(str,argment);SearchCount++;continue;#define fsym(s)        for(long s=0;s<4;s++)#define isSct(s1,s2)    if(!(s1==1 && s2<=1 || s1==3 && s2>=2))#define tct           &n......

阅读全文(4368) | 评论:6

递归法生成2D迷宫(2007-03-25 19:46:00)

摘要:感谢网友forjane#include <stdio.h>#include <stdlib.h>#include <time.h>#define MAZE_MAXWIDTH    80#define MAZE_MAXHIGHT    26char map[MAZE_MAXWIDTH+2][MAZE_MAXHIGHT+2];void search(int x,int y){    static int zadd[4][2]={0,1,1,0,0,-1,-1,0};    int zx=x*2,zy=y*2,next,turn,i;    map[zx][zy]=1;  //当前坐标置1    turn=rand()%2? 1:3; //turn=1为顺时针3为逆时针    for(i=0,next=rand()%4;i<4;i++,next=(next+turn)%4)    {        if(map[zx+2*zadd[next][0]][zy+2*zadd[next][1]]==0)        {            map[zx+zadd[next][0]][zy+zadd[next][1]]=1; //中间的路径置1           &nb......

阅读全文(4967) | 评论:10