博文

论坛文章:基础算法、技巧、调试概要(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......

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

有重复元素的全排列输出(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[......

阅读全文(6930) | 评论: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;
        ......

阅读全文(7418) | 评论: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]++;
  ......

阅读全文(3427) | 评论: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;
}......

阅读全文(4847) | 评论: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    &nbs......

阅读全文(4233) | 评论: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    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;......

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