易码技术论坛

 找回密码
 加入易码
搜索
12
返回列表 发新帖
楼主: Eastsun

[源码] 一个面试题目...

[复制链接]
发表于 2006-12-2 12:51:46 | 显示全部楼层
用c++ builderX
好象有3个问题......
 楼主| 发表于 2006-8-4 14:04:22 | 显示全部楼层 |阅读模式
给出下面的C代码,可以调试运行.写一个该程序的详细说明文档:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define N(I,l) s l]=(I?1<<I|I<<10:01776)
  4. #define f(a,t) for(a=0;a<t;a++)
  5. #define Wq(d,o,u) O(l/9,d) O(l%9,o) O(l%9/3+l/27*3,u)
  6. #define NO ;printf("%c %s",I?I|48:46,++l%3?"":l%9?"| ":l%27?"\n":l%&#39;Q&#39;?z:"\n");
  7. #define Ba(k,a) {O||printf("!!! " #a " %i\n",k+1);goto l;}
  8. #define O(o,k) f(l,9) c[l]= *#k?0x3fe:-1;\
  9.   f(l,81) if(*#k){\
  10.    if(!(s]&c[o])) Ba(o,k) c[o]&=~(1<<(s]>>10));\
  11.   } else if((s]>>l0)&1) c[o]=c[o]+1?-2:l;\
  12.   if(*#k) { f(l,81) if(s]>>10||(s]&=c[o]),!s]) Ba(o,k) }\
  13.   else f(l,9) l[c]<0||s[c]]>>10||(N(l0,[c]),C++);
  14. struct{ int s[81],I,l,O; } S[0123];
  15. int I, l, l0, o, C, O=0, w=0, c[10], L; long i;
  16. char z[] = "\007    &     &    \n";
  17. #define s S].s[l
  18. int main(int n,char**N) {
  19.    S->O=0; L=n>1?*N[1]-85?1:6:0; i=L&1?atol(N[1]):123;
  20. #define i (int)(81.0*(i=1103515245*i+12345&0x7fffffff)/2147483648.0)
  21.    for(l=C=0;l<81;) {
  22.    I=L&1?0:getchar()^48; i; I=I-30?I:0;
  23.    if(I<10) {
  24.       #define S S[O
  25.       if(C<22) z[C++]^=13; N(I,)NO
  26.    }
  27.    }
  28.    for(;;) {
  29.    l0:
  30.       Wq(row,col,box) C=l0=0;
  31.    f(l,81) if(!(s]>>10&&++l0)) {
  32.     o=s]&1022; for(I=0;~o&1&&(o/=2);I++); o-1||(s]|=I<<10,C++);
  33.    } if(l0==l) {
  34.     if(O&&L&2) { O--; goto l0; } goto O;
  35.    } for(l0=1;10>l0;l0++) { Wq(,,) }
  36.    if(!C) {
  37.       l=(o=S].O)?S].I:0; I=o?S].l%9+1:(S].O=i%9+1);
  38.       for(;l<81;l++,I=S].O,o=0) if(!(s]>>10)) {
  39.       for(;;I=I%9+1,o=1) {
  40.         l0=0; if(o&&I==S].O) goto O;
  41.         if(s]>>I&1) {
  42.         S].l=I; S++].I=l; S]=S-1];
  43.         N(I,); O>w&&(w=O); goto lO;
  44.         }
  45.       }
  46.       }
  47.    }
  48.    lO: S].O=0; goto l0; l: if(!(l0=O)) { L=0; goto O; } O--;
  49.    s,S].I] &=~ (1<<S].l);
  50.    }
  51.    O: switch(L) {
  52.    case 2: if(l0) {
  53.    case 3: O=82;
  54.       for(S].l=l=i%81;l0||S].l-l;l=(l+1)%81)
  55.           O1: if(l0=0,S].O=s]>>10,~s]&1) {
  56.       s]=1023; S].I=l; S&0]=S]; w=O=0; L=2; goto lO;
  57.       }
  58.       L=0; l0=1;
  59.    } else {
  60.       l=S=82].I; N(S].O,)|1; goto O1;
  61.    }
  62.    }
  63.    printf("\n\n"); for(l=0;l<81;) {I=s]>>10 NO}
  64.    printf("\n%s (stk %i %i)\n",l0?"JS":"JX",O,w);
  65.    L|=2; if(L-3||!l0) return!l0; S,82]=S]; goto O;
  66. }
复制代码
[s:7]

a.rar

2 KB, 下载次数: 39

[color=red]代码的文本文件:[/color]

您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-3-29 18:28 , Processed in 0.012295 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表