Thứ Sáu, 19 tháng 12, 2014

Hỏi - Đáp về HSG 10

Các em nếu cần hỏi gì về bài toán học sinh giỏi 10 thì viết dưới đây.
Thầy.

1 nhận xét:

  1. Biểu thức
    Cho số tự nhiên N, hãy đặt các dấu +,- vào giữa các chữ số nào đó của 1,2,3,4,5,6,7,8,9 (viết theo thứ tự đã cho) để tạo thành 1 biểu thức có kết quả bằng N. Ví dụ: với N=122 thì 1 kết quả có thể là: 12+34-5-6+78+9=122. Nếu không tìm được thì thông báo 0.
    Exp.inp
    122
    Exp.out
    12+34-5-6+78+9

    Bài giải của Hikari Amura :
    uses crt;
    var x: array[1..100] of longint;
    n: longint;
    //---------------------------------------
    Procedure Print;
    var i,b,s: longint;
    Begin
    s:=0; b:=1;
    For i:=1 to 8 do
    Begin
    If x[i]=1 then
    Begin
    s:=s+b;
    If b>0 then b:=b*10+1+i
    Else b:=b*10-(i+1);
    End;
    If x[i]=2 then //+
    Begin
    s:=s+b;
    b:=b+i+1;//b:=i+1;
    End;
    If x[i]=3 then //-
    Begin
    s:=s+b;
    b:=b-(i+1);////b:=?;
    End;
    End;
    s:=s+b;
    If s=n then
    Begin
    write('1');
    For i:=1 to 8 do// begin
    If x[i]=1 then write(i+1);
    If x[i]=2 then write('+',i+1);
    If x[i]=3 then write('-',i+1);//end;

    End;
    End;
    //-------------------------------------------
    Procedure Try(i: longint);
    var j: integer;
    Begin
    For i:=1 to 3 do
    Begin
    x[i]:=j;
    If i=8 then Print else Try(i+1);
    End;
    End;
    //------------------------------------------
    Begin
    write('n=?');
    read(n);
    Try(1);
    End.

    Trả lờiXóa