题解

205 条题解

  • 0
    @ 2009-02-05 16:43:42

    反正1

  • 0
    @ 2009-02-02 11:11:27

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    var a:array[1..9,1..9] of 1..9;

    n,i,x,y,j,xx,yy:integer;

    t:set of 1..9;

    flg:boolean;

    b:array[1..20] of boolean;

    function te1:boolean;

    begin

    for y:= 1 to 9 do

    begin

    t:=[];

    for x:= 1 to 9 do

    t:=t+[a[x,y]];

    for j:= 1 to 9 do

    if ( not ( j in t )) then exit(false);

    end;

    end;

    function te2:boolean;

    begin

    for xx:= 1 to 3 do

    for yy:= 1 to 3 do

    begin

    x:=3*(xx-1) + 1 ;

    y:=3*(yy-1) + 1 ;

    t:=[a[x,y],a[x,y+1],a[x,y+2],a[x+1,y],a[x+1,y+1],a[x+1,y+2],a[x+2,y],a[x+2,y+1],a[x+2,y+2]];

    for j:= 1 to 9 do

    if ( not ( j in t )) then exit(false);

    end;

    end;

    begin

    readln(n);

    for i:= 1 to n do

    begin

    flg:=true;

    for x:= 1 to 9 do

    begin

    t:=[];

    for y:= 1 to 9 do

    begin

    read(a[x,y]);

    t:=t+[a[x,y]];

    end;

    for j:= 1 to 9 do

    if ( not ( j in t )) then flg:=false;

    readln;

    end;

    if flg then

    flg:=te1;

    if flg then

    flg:=te2;

    if i < n then readln;

    b[i]:=flg;

    end;

    for i:= 1 to n do

    if b[i] then writeln('Right')

    else writeln('Wrong');

    end.

    最猥琐的方法

  • 0
    @ 2009-01-28 01:47:23

    用BOOLEAN数组记录边都边判断,不行的时候不能EXIT退出来,因为有多组数据,半路跑出来就读不完,影响下一组。

    const r:array [1..9] of integer = (1,1,1,2,2,2,3,3,3);

    var i,j,k,x,n:integer;

    f1,f2,f3:array [1..9,1..9] of boolean;

    function check:boolean;

    begin

    fillchar(f1,sizeof(f1),0);

    fillchar(f2,sizeof(f2),0);

    fillchar(f3,sizeof(f3),0);

    check:=true;

    for i:=1 to 9 do

    for j:=1 to 9 do

    begin

    read(x);

    if f1[x,i] or f2[x,j] or f3[x,r[j]+(r[i]-1)*3] then

    check:=false;

    f1[x,i]:=true; f2[x,j]:=true; f3[x,r[j]+(r[i]-1)*3]:=true;

    end;

    end;

    begin

    readln(n);

    for k:=1 to n do

    if check then writeln('Right')

    else writeln('Wrong');

    end.

  • 0
    @ 2009-01-26 12:54:45

    var a:array [1..9,1..9] of byte;

    jihe:set of 1..9;

    flag:boolean;

    t,i,n,j,ki,kj:integer;

    begin

    flag:=true;

    readln(n);

    t:=0;

    repeat

    inc(t);

    for i:=1 to 9 do

    begin

    for j:=1 to 9 do

    read(a);

    end;

    flag:=true;

    for i:=1 to 9 do

    begin

    jihe:=[];

    for j:=1 to 9 do

    jihe:=jihe+[a];

    if jihe[1..9] then

    begin

    flag:=false;

    break;

    end;

    end;

    if not flag then writeln('Wrong');

    if flag then

    begin

    for j:=1 to 9 do

    begin

    jihe:=[];

    for i:=1 to 9 do

    jihe:=jihe+[a];

    if jihe[1..9] then

    begin

    flag:=false;

    break;

    end;

    end;

    if not flag then writeln('Wrong');

    end;

    if flag then

    begin

    ki:=1;

    kj:=1;

    repeat

    if ki = 10 then begin ki:=1; inc(kj,3); end;

    if kj = 10 then break;

    jihe:=[];

    for i:=ki to ki+2 do

    for j:=kj to kj+2 do

    jihe:=jihe+[a];

    if jihe[1..9] then flag:=false;

    if not flag then writeln('Wrong');

    if not flag then break;

    inc(ki,3);

    until false;

    end;

    if flag then writeln('Right');

    until t>=n

    end.

  • 0
    @ 2009-01-13 20:14:25

    ac100题纪念!!!!!!!!!!!

  • 0
    @ 2009-01-06 22:27:51

    判断时 打成 Flag:=(L = [1..9])了...

    结果 竟然只有第三组错...

    改成 Flag:= Flag And (L = [1..9]) 就AC了...

  • 0
    @ 2008-12-31 19:46:06

    #include

    #include

    #define clrnum() memset(num,0,sizeof(num))

    int main() {

    int n,i,j,k,m,p,q;

    char su[9][9],num[10];

    scanf("%d",&n);

    for(i=0;i

  • 0
    @ 2008-12-28 11:17:35

    唉,本人想不到什么好方法,就胡乱写了写,虽然AC了,一共80行!无语了!

  • 0
    @ 2008-12-20 14:31:34

    为什么牛们代码都写那么长?

    我40多行就可以AC

    思路是这样的:

    首先读入一个完整的数独,对每个小九宫格进行判断,如果不满足条件(1-9全部出现)就输出Wrong;如果所有的小九宫格都符合条件,再判断每行和每列.

    也许我AC是由于数据不够强,因为我没有判断每一斜行(因为很麻烦),糊涂地AC了,自己都不明白这样能不能考虑全面.

    希望大牛指出不足....

  • 0
    @ 2008-12-17 16:09:09

    我汗。。。谁解释下这是咋回事?

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:运行超时|格式错误...

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

  • 0
    @ 2008-12-02 21:41:36

    var n,i,j,k:integer;

    a:array[1..20,1..9,1..9]of byte;

    ok:array[1..9]of 0..1;

    f:boolean;

    begin

    readln(n);

    for i:=1 to n do

    for j:=1 to 9 do begin

    for k:=1 to 9 do

    read(a);

    readln;

    end;

    for i:=1 to n do begin

    f:=true;

    for j:=1 to 9 do begin

    fillchar(ok,sizeof(ok),0);

    for k:=1 to 9 do

    ok[a]:=1;

    for k:=1 to 9 do

    if ok[k]=0 then begin

    f:=false;

    break;

    end;

    end;

    if f=false then begin

    writeln('Wrong');

    break;

    end else begin

    for j:=1 to 9 do begin

    fillchar(ok,sizeof(ok),0);

    for k:=1 to 9 do

    ok[a]:=1;

    for k:=1 to 9 do

    if ok[k]=0 then begin

    f:=false;

    break;

    end;

    end;

    if f=false then begin

    writeln('Wrong');

    break;

    end else begin

    fillchar(ok,sizeof(ok),0);

    for j:=1 to 3 do

    for k:=1 to 3 do

    ok[a]:=1;

    for j:=1 to 9 do if ok[j]=0 then begin

    f:=false;

    break;

    end;

    fillchar(ok,sizeof(ok),0);

    for j:=1 to 3 do

    for k:=4 to 6 do

    ok[a]:=1;

    for j:=1 to 9 do if ok[j]=0 then begin

    f:=false;

    break;

    end;

    fillchar(ok,sizeof(ok),0);

    for j:=1 to 3 do

    for k:=7 to 9 do

    ok[a]:=1;

    for j:=1 to 9 do if ok[j]=0 then begin

    f:=false;

    break;

    end;

    fillchar(ok,sizeof(ok),0);

    for j:=4 to 6 do

    for k:=1 to 3 do

    ok[a]:=1;

    for j:=1 to 9 do if ok[j]=0 then begin

    f:=false;

    break;

    end;

    fillchar(ok,sizeof(ok),0);

    for j:=4 to 6 do

    for k:=4 to 6 do

    ok[a]:=1;

    for j:=1 to 9 do if ok[j]=0 then begin

    f:=false;

    break;

    end;

    fillchar(ok,sizeof(ok),0);

    for j:=4 to 6 do

    for k:=7 to 9 do

    ok[a]:=1;

    for j:=1 to 9 do if ok[j]=0 then begin

    f:=false;

    break;

    end;

    fillchar(ok,sizeof(ok),0);

    for j:=7 to 9 do

    for k:=1 to 3 do

    ok[a]:=1;

    for j:=1 to 9 do if ok[j]=0 then begin

    f:=false;

    break;

    end;

    fillchar(ok,sizeof(ok),0);

    for j:=7 to 9 do

    for k:=4 to 6 do

    ok[a]:=1;

    for j:=1 to 9 do if ok[j]=0 then begin

    f:=false;

    break;

    end;

    fillchar(ok,sizeof(ok),0);

    for j:=7 to 9 do

    for k:=7 to 9 do

    ok[a]:=1;

    for j:=1 to 9 do if ok[j]=0 then begin

    f:=false;

    break;

    end;

    end;

    end;

    if f=false then writeln('Wrong')else writeln('Right');

    end;

    end.

    为什么只能得40分???

  • 0
    @ 2008-11-18 01:43:18

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    program check_num;

    var row,line,gz:array[1..9,1..9]of word;

    n,num:word;

    i:word;

    stemp:word;

    procedure inpu;

    var h,g,k,l,q:word;

    begin

    fillchar(row,sizeof(row),0);

    fillchar(line,sizeof(line),0);

    fillchar(gz,sizeof(gz),0);

    q:=1;l:=0;

    for k:=1 to 3 do

    begin

    for h:=1 to 3 do

    begin

    inc(l);

    for g:=1 to 3 do

    begin

    read(stemp);

    inc(gz[q,stemp]);

    inc(line[l,stemp]);

    inc(row[g,stemp]);

    end;

    for g:=4 to 6 do

    begin

    read(stemp);

    inc(gz[q+1,stemp]);

    inc(line[l,stemp]);

    inc(row[g,stemp]);

    end;

    for g:=7 to 9 do

    begin

    read(stemp);

    inc(gz[q+2,stemp]);

    inc(line[l,stemp]);

    inc(row[g,stemp]);

    end;

    readln;

    end;

    inc(q,3);

    end;

    end;

    procedure check;

    var g,h,k:word;

    begin

    for g:=1 to 9 do

    begin

    k:=0;

    for h:=1 to 9 do

    k:=k+(line[g,h] mod 2);

    if k9 then

    begin

    writeln('Wrong');

    exit;

    end;

    end;

    for g:=1 to 9 do

    begin

    k:=0;

    for h:=1 to 9 do

    k:=k+(row[g,h] mod 2);

    if k9 then

    begin

    writeln('Wrong');

    exit;

    end;

    end;

    for g:=1 to 9 do

    begin

    k:=0;

    for h:=1 to 9 do

    k:=k+(gz[g,h] mod 2);

    if k9 then

    begin

    writeln('Wrong');

    exit;

    end;

    end;

    writeln('Right');

    end;

    Begin

    read(n);

    for i:=1 to n do

    begin

    readln;

    inpu;

    check;

    end;

    End.

  • 0
    @ 2008-11-11 13:09:22

    VS_FLY的用方差判断的不成立。

    写了个程序枚举证明(我连均值(总和)都带上了,依旧不成立),得到932400组解,大于9!=362880。

    程序如下(脑残风格,其实可以利用main函数来递归,我懒得改了):

    /*sudoku.c by Tydus.*/

    #include

    int a[9]={1,2,3,4,5,6,7,8,9};

    int i,s,sum;

    void it(){

    for(i=0,s=0;i

  • 0
    @ 2008-11-10 15:33:50

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

       ┐  

    ┌─┐│ ┐

      │├─┘

      │├─╮

    ┌─╯│ │

    └ └╯ ╯

  • 0
    @ 2008-11-08 08:20:38

    忘了一个fillchar,交了3遍......

  • 0
    @ 2008-11-03 17:47:04

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案错误...程序输出比正确答案长

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Unaccepted 有效得分:90 有效耗时:0ms

    ?????????

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    竟然2次都90,55555

  • 0
    @ 2008-11-03 09:11:16

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案错误... ├ 标准行输出

     ├ 错误行输出

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案错误... ├ 标准行输出

     ├ 错误行输出

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    why....中间不应该BREAK...

  • 0
    @ 2008-10-28 17:38:43

    一次AC

    var

    n:integer;

    a:array[1..9,1..9] of integer;

    function truge:boolean;

    var

    f:boolean;

    i,j,k,l,s,t:longint;

    begin

    if f then

    for i:=1 to 9 do

    for j:=1 to 8 do

    for k:=j+1 to 9 do if (a=a) or (a[j,i]=a[k,i]) then exit(false);

    for i:=0 to 2 do

    for j:=0 to 2 do

    for k:=i*3+1 to (i+1)*3 do

    for l:=j*3+1 to (j+1)*3 do

    for s:=i*3+1 to (i+1)*3 do

    for t:=j*3+1 to (j+1)*3 do

    if ((ks) or (lt)) and (a[k,l]=a) then exit(false);

    truge:=true;

    end;

    procedure main;

    var

    i,j,k:longint;

    begin

    readln(n);

    for k:=1 to n do

    begin

    for i:=1 to 9 do

    for j:=1 to 9 do read(a);

    if kn then readln;

    if truge then writeln('Right') else writeln('Wrong');

    end;

    end;

    begin

    main;

    end.

  • 0
    @ 2008-10-22 11:33:05

    数据量很小,,一次AC

    暴力破解就行

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

  • 0
    @ 2008-10-20 17:04:02

    about:

信息

ID
1335
难度
4
分类
模拟 点击显示
标签
递交数
5130
已通过
1978
通过率
39%
被复制
20
上传者