博文

农历公历换算(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[]这个数组来保存这些信息。 ......

阅读全文(7729) | 评论: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]= {"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"}; const char sSX[][3]= {"鼠","牛","虎","兔",&qu......

阅读全文(7275) | 评论: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; 欢迎大家发表评论. ......

阅读全文(4437) | 评论: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[row]=low; row++; low=0; } else low++; if (row>=N) break; while (low>=N) { row--; low=blow[row]; a[row][low]=0; low++; } } for (i=0;i<N;i++) { for (j=0;j<N;j++) ......

阅读全文(3043) | 评论: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][j]) printf("Q"); else printf("o"); } printf("\n"); } getch(); }......

阅读全文(2732) | 评论: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("\n"); } getch(); }......

阅读全文(2851) | 评论: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 && i>0 && j>0;i--,j--) if (chess_map[i-1][j-1]==player) left_top_sum++; else break; for (i=column,j=row;i<=column+4 && j<=r......

阅读全文(16192) | 评论: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); for (i=0;i<16;i++)     {     line(top_x+i*20,top_y,top_x+i*20,top_y+300);     line(top......

阅读全文(16311) | 评论: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;         computer=false;     ......

阅读全文(3582) | 评论: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++)         {//恢复玩家信息             ptab......

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