博文
论坛文章:基础算法、技巧、调试概要(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=35
2.输入一个奇数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 23
3.输入一个1e9以内的整数n和k......
有重复元素的全排列输出(2007-04-07 15:01:00)
摘要:例如,输入aabc,按字典顺序输出:
aabc
aacb
abac
abca
acab
acba
baac
baca
bcaa
caab
caba
cbaa
偶的代码如下:
#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[......
超高精度算阶乘(快速)(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;
......
数字迷通解程序(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]++;
 ......
列举完全数快速算法(瞬间列出前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 &nbs......
递归法生成2D迷宫(2007-03-25 19:46:00)
摘要:感谢网友forjane
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAZE_MAXWIDTH 80
#define MAZE_MAXHIGHT 26
char 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;......