博文
论坛文章:基础算法、技巧、调试概要(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),判断它是不是......
有重复元素的全排列输出(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......
超高精度算阶乘(快速)(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......
数字迷通解程序(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......
列举完全数快速算法(瞬间列出前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;}......
简单去冗余解的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......
递归法生成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......
