博文

农历公历换算(ZT)续(2005-08-08 11:06:00)

摘要:首先是要保存公农历之间的转换信息:以任意一年作为起点,把从这一年起若干年(若干是多少?就看你的需要了)的农历信息保存起来(在我的VCL中,是以1921年作为起点)。回想一下,我们平常是怎样来转换公历农历的呢?是查万年历,万年历有每一天的公历农历,直接一查就可以了。那么我们可不可以也这样做呢?当然可以,但是,这样做就要收录每一天的信息,工作量就会很大,所以我们要简化这些信息。怎么简化呢?要保存一年的信息其实只要两个信息就可以了:1、农历每个月的大小;2、今年是否有闰月,闰几月以及闰月的大小。用一个整数来保存这些信息就足够了。具体的方法是:用一位来表示一个月的大小,大月记为1,小月记为0,这样就用掉12位(无闰月)或13位(有闰月),再用高4位来表示闰月的月份,没有闰月记为0。比如说,2000年的信息数据是是0xC96,化成二进制就是110010010110B,表示的含义是指1、2、5、8、10、11月大,其余月小;2001年的农历信息数据是0x41A95,其中4表示今年闰四月,月份大小信息就是0x1A95(因为闰月,所以有13位),具体的就是1、2、4、5、8、10、12月大,其余月份小(0x1A95=1101010010101B),要注意在四月的后面那一个0表示的是闰四月小,接着的那个1表示5月大。这样就可以用一个数组来保存这些信息。在我的VCL程序中是用ChineseCalendarData[]这个数组来保存这些信息。
......

阅读全文(7480) | 评论:0

农历公历换算(ZT)(2005-08-08 11:04:00)

摘要:完全是标准的c函数,不过我在vc下写的,。相信移植没问题。
另外,我还用php写了一遍。
/*************************************************
计算阴历日期
范围从2000/02/05开始的20年
代码实现:耙子 2001/08/17
最后修订: 2001/08/18
**************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
typedef unsigned int DWORD;
/**************************************************
sLunar: 返回阴历日期字符串
dwDays: 所求日期距离 2000/02/05的天数差
**************************************************/
void Lunar2Solar(char *sLunar, const DWORD dwDays)
{
const char sTG[][3]= {"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};
const char sDZ[][3]= {"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"}; ......

阅读全文(7044) | 评论:0

C语言动态申请空间问题(2005-08-08 00:53:00)

摘要:对一位数组,不知道数组大小可以这样做:
int *a;
int i,n;
scanf("%d",&n);
a=(int *)malloc(n*sizeof(int));
这样就相当于C++的定义:
int n;
int a[n];
cin>>n;

对2位数组操作如下:
int **a;
int i,m,n;
scanf("%d %d",&m,&n);
*a=(int **)malloc(m*sizepf(int *));
for (i=0;i<m;i++)
a[i]=(int *)malloc(n*sizeof(int));
这样就相当于C++的定义:
int m,n;
int a[m][n];
cin>>m>>n;


欢迎大家发表评论.
......

阅读全文(4212) | 评论:2

N皇后问题(2005-08-08 00:42:00)

摘要:#include <stdio.h>


int N;
int *blow;
int **a;
int fun(int r,int l)
{
int i,j;
for (i=0;i<N;i++)
if (a[i][l]==1 || a[r][i]==1) return 0;
for (i=r,j=l;i>=0 && j>=0;i--,j--)
if (a[i][j]==1) return 0;
for (i=r,j=l;i<N && j<N;i++,j++)
if (a[i][j]==1) return 0;
for (i=r,j=l;i>=0 && j<N;i--,j++)
if (a[i][j]==1) return 0;
for (i=r,j=l;i<N && j>=0;i++,j--)
if (a[i][j]==1) return 0;
return 1;
}

int main()
{
int i,j;
int row=0,low=0;/*行,列*/
printf("Enter the N:\n");
scanf("%d",&N);
/*C语言动态申请问题*/
blow=(int *)malloc(N*sizeof(int));
*a=(int **)malloc(N*sizeof(int *));
for (i=0;i<N;i++)
a[i]=(int *)malloc(N*sizeof(int));
/*C语言动态申请问题*/

for (i=0;i<N;i++)
for (j=0;j<N;j++)
a[i][j]=0;
while(1)
{
if (fun(row,low))
{
a[row][low]=1;
blow[......

阅读全文(2843) | 评论:0

八皇后(正确版)(2005-08-08 00:32:00)

摘要:#include <stdio.h>
int blow[8];
int a[8][8];
int fun(int r,int l)
{
int i,j;
for (i=0;i<8;i++)
if (a[i][l]==1 || a[r][i]==1) return 0;
for (i=r,j=l;i>=0 && j>=0;i--,j--)
if (a[i][j]==1) return 0;
for (i=r,j=l;i<=7 && j<=7;i++,j++)
if (a[i][j]==1) return 0;
for (i=r,j=l;i>=0 && j<=7;i--,j++)
if (a[i][j]==1) return 0;
for (i=r,j=l;i<=7 && j>=0;i++,j--)
if (a[i][j]==1) return 0;
return 1;
}

int main()
{
int i,j;
int row=0,low=0;/*行,列*/
for (i=0;i<8;i++)
for (j=0;j<8;j++)
a[i][j]=0;


while(1)
{
if (fun(row,low))
{
a[row][low]=1;
blow[row]=low;
row++;
low=0;
}
else
low++;
if (row>=8) break;
while (low>=8)
{
row--;
low=blow[row];
a[row][low]=0;
low++;
}
}
for (i=0;i<8;i++)
{
for (j=0;j<8;j++)
{
if (a[i][......

阅读全文(2538) | 评论:3

8皇后(2005-08-07 19:30:00)

摘要:#include <stdio.h>
int a[8][8];
int fun(int r,int l)
{
int i,j;
for (i=0;i<8;i++)
if (a[i][l]==1 || a[r][i]==1) return 0;
for (i=r,j=l;i>=0 && j>=0;i--,j--)
if (a[i][j]==1) return 0;
for (i=r,j=l;i<=7 && j<=7;i++,j++)
if (a[i][j]==1) return 0;
for (i=r,j=l;i>=0 && j<=7;i--,j++)
if (a[i][j]==1) return 0;
for (i=r,j=l;i<=7 && j>=0;i++,j--)
if (a[i][j]==1) return 0;
return 1;
}

int main()
{
int i,j;
int row=0,low=0,blow=0;/*行,列,前面的列*/
for (i=0;i<8;i++)
for (j=0;j<8;j++)
a[i][j]=0;


while(1)
{
if (fun(row,low))
{
a[row][low]=1;
row++;
blow=low;
low=0;
}
else
low++;
if (low>=8)
{
row--;
low=blow;
a[row][low]=0;
}
if (row>7) break;
}
for (i=0;i<8;i++)
{
for (j=0;j<8;j++)
printf("%d",a[i][j]);
printf(&q......

阅读全文(2636) | 评论:0

五子棋(II)续(2005-08-07 11:10:00)

摘要:/***********************************************/
/* 是否胜利,是返回1 */
int victory(int player)
{
int column=E_column,row=E_row;
int left_sum=0,right_sum=0;
int top_sum=0,down_sum=0;
int left_top_sum=0,right_down_sum=0;
int right_top_sum=0,left_down_sum=0;
int i,j;

for (i=column;i>=column-4 && i>0;i--)
if (chess_map[i-1][row-1]==player)
left_sum++;
else
break;
for (i=column;i<=column+4 && i<17;i++)
if (chess_map[i-1][row-1]==player)
right_sum++;
else
break;
if ((left_sum+right_sum)==6)
return 1;


for (j=row;j>=row-4 && j>0;j--)
if (chess_map[column-1][j-1]==player)
top_sum++;
else
break;
for (j=row;j<=row+4 && j<17;j++)
if (chess_map[column-1][j-1]==player)
down_sum++;
else
break;
if ((top_sum+down_sum)==6)
return 1;


for (i=column,j=row;i>=column-4 && j>=row-4 &am......

阅读全文(4256) | 评论:0

五子棋(II)(2005-08-07 11:10:00)

摘要:#include <graphics.h>
#include <dos.h>
#include <stdio.h>
#define computer 2
#define elva6401 1
#define left 75
#define right 77
#define down 80
#define up 72
#define enter 0
#define ALT_X 45
#define top_x 120
#define top_y 100
int chess_map[16][16];
int column,row;
int b_column,b_row;/*记下移动前行列,为了un_draw_chess()*/
int E_column,E_row;/*记下按enter的行列或电脑的想的行列*/
int flag=1;

/***********************************************/
/* 初始化行列 */
int init_col_row()
{
int i,j;
for (i=0;i<16;i++)
for (j=0;j<16;j++)
    if (chess_map[i][j]==0)
    {
    b_column=column=16-i;
    b_row=row=16-j;
    return 0;
    }
}
/***********************************************/
/* 画整个棋盘 */
int draw_map()
{
int i;
setcolor(GREEN......

阅读全文(4406) | 评论:2

五子棋AI(IV)(2005-08-07 11:05:00)

摘要:(10)    程序流程的部分控制:
void CMyChessDlg::OnTimer(UINT nIDEvent)
{
    // TODO: Add your message handler code here and/or call default
    IsWin();//是否已有一方获胜
    if(pwin)
    {//玩家获胜
        KillTimer(0);
        MessageBox("恭喜,您真厉害!");
        player=false;
        computer=false;
        m_binit=true;
    }
    else if(cwin)
    {//计算机获胜
        KillTimer(0);
        MessageBox("抱歉,您输了");
        player=false;
  &nbs......

阅读全文(3344) | 评论:0

五子棋AI(III)(2005-08-07 11:04:00)

摘要://        ChangeStatus(ptempboard);
        pi=i;
        pj=j;
        while(SearchBlank(i,j,ptempboard))
        {//进行第二不查找
            ptempboard[i][j]=3;//标记已被查找
            ptemp=GiveScore(0,i,j);
            if(pscore>ptemp)//此时为玩家下子,运用极小极大法时应选取最小值
                pscore=ptemp;
        }
        for(m=0;m<n;m++)
        {//恢复玩家信息
    &nbs......

阅读全文(3363) | 评论:0