Tin học Tây Sơn

Bài 5 HSG 1819

Go down

Bài 5 HSG 1819

Bài gửi by Admin on Tue Nov 06, 2018 4:27 pm

Bài 5: (3,0 điểm) Nhập vào hai số tự nhiên n và m (n, m <109 ). Hãy in ra chu kỳ của phân số n/m. Ví dụ: 1/7 có chu kỳ là (142857); 1/3 có chu kỳ là (3); 2/1 không có chu kỳ.







INPUT
OUTPUT
n=1; m=7(142857)
n=2; m=1Khong co chu ky
















Test
Input
Output
1n=33; m=99(3)
2n= 1254; m=8778(142857)
3n= 3227; m=555(144)
4n= 12; m=240(0)
5n= 1; m=46(2173913043478260869565)
6n=9; m=3 
code tham khảo:
Code:
Program bai5;
uses crt;
type mang=array[1..1000] of longint;
var n,m,du,i,j,vt:longint;
    ok: boolean;
    a,b:mang;

Function tt(a:mang;x:longint):boolean;
begin
tt:=false;
for j:=1 to i-1 do
if x=A[j] then
begin tt:=true; vt:= j; exit end {vt dung de danh dau vi tri lap}
end;

Procedure chuky;
begin
OK:=true; {bien ok de kiem tra xem co lap vo han tuan hoan}
du:= n mod m; i:=1;
b[i]:=n div m; {mang b de chua phan so}
a[i]:=n mod m; {mang a de chua phan du}
while OK and (du<>0) do
        begin
        du:=a[i] * 10;
        inc(i);a[i]:=du mod m;b[i]:=du div m;
        if tt(a,a[i]) then ok:=false;
        end;
if (du=0) then write('(0)') else
        begin
        write('(');
        for j:=vt+ 1 to i do write(b[j]);
        write(')');
        end;
end;

Begin
clrscr;
repeat writeln('Nhap n: '); readln(n);
writeln('Nhap m: '); readln(m);
 until (m>0) and (n>0);
chuky;
readln
End.


Được sửa bởi Admin ngày Thu Dec 20, 2018 2:28 pm; sửa lần 2.
avatar
Admin
Admin
Admin

Posts : 687
Reputation : -10042
Join date : 16/11/2015
Age : 29

Xem lý lịch thành viên http://tinhocts.forumvi.com

Về Đầu Trang Go down

Re: Bài 5 HSG 1819

Bài gửi by Nguyễn Ngọc Thiên on Wed Nov 07, 2018 6:25 pm

Code:
Program bai5;
uses crt;
type mang=array[1..1000] of longint;
var n,m,du,i,j:longint;
ok: boolean;
a,b:mang;

Function tt(a:mang;b:longint):boolean;
begin
tt:=false;
for j:=1 to i-1 do
if b=A[j] then
begin tt:=true; break end
end;
Procedure chuky;
begin
OK:=true;
du:= n mod m;
if du=0 then write('(0)') else
begin
i:=0;
while OK and (du&lt;&gt;0) do

begin

while du &lt; m do du:=du*10;
inc(i);a[i]:=du mod m;b[i]:=du div m;

du:=du mod m;

if tt(a,du) then ok:=false;
end;
if (du=0) or not ok then write('(0)') else
begin
write('(');

for j:=1 to i-1 do if a[j]&lt;&gt; a[i] then write(b[j]);
write(')');
end;
end;
end;
Begin
clrscr;
repeat write('Nhap n: '); readln(n);
write('Nhap m: '); readln(m);
until (m&gt;0) and (n&gt;0);
chuky;
readln
End.
avatar
Nguyễn Ngọc Thiên
Teen Chính hiệu
Teen Chính hiệu

Posts : 19
Reputation : -179986
Join date : 06/11/2018
Age : 14
Location : Bình tường, Tây Sơn, Bình Định

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Bài 5 HSG 1819

Bài gửi by Nguyễn Văn Biên on Thu Nov 08, 2018 1:53 pm

Code:
program Bai_5;
uses crt;
var n,m,doi,i,vt:integer;
    tp:string;
    A:array[1..100] of integer;

function ok:boolean;

procedure kt;
var j:integer;
begin
        for i:=1 to length(tp)-1 do
        for j:=i+1 to length(tp) do
        begin
                if A[i]=A[j] then
                        if j=2 then vt:=i
                        else exit
                else vt:=j;
        end
end;

procedure chuyendoi;
begin
        str(frac(n/m),tp);
        delete(tp,3,1); delete(tp,1,1);
        for i:=1 to length(tp) do
        begin
                val(tp[i],doi);
                A[i]:=doi
        end
end;

begin
        if (n mod m = 0) or ((n mod m) = (frac(n/m))) then
        ok:=false
        else begin chuyendoi; kt; ok:=true end
end;

begin
        clrscr;
        write('Nhap n: '); readln(n);
        repeat write('Nhap m: '); readln(m); until m<>0;
        if ok then
        begin
                write('Chu ky cua phan so n/m la: ');
                for i:=1 to vt do write(A[i])
        end
        else write('Chu ky bang 0');
        readln
end.

_________________

My:
- XDA Account
- Blog
- Game

...
avatar
Nguyễn Văn Biên
Recognised Member & Recognised Developer & Protected Member & Super Administrator
Recognised Member & Recognised Developer & Protected Member & Super Administrator

Posts : 220
Reputation : 1129923
Join date : 18/06/2018
Age : 15
Location : ?

Xem lý lịch thành viên https://bien2004official.blogspot.com

Về Đầu Trang Go down

Re: Bài 5 HSG 1819

Bài gửi by Nguyễn Ngọc Thiên on Thu Nov 08, 2018 1:55 pm

Code:
Program bài 5
uses crt;
var n,m,doi,i,vt:longint;
st:string;
a:array[1..100] of longint;

function kt:boolean;
procedure xuli;
var j:longint;
begin
for i:=1 to length(st)-1 do
      for j:=i+1 to length(st) do
              begin
              if a[i]=a[j] then
                      if j=2 then
                              vt:=i
                      else
                      exit
                      else
                      vt:=j;
              end
      end;
procedure cd;
begin
str(frac(n/m),st);
delete(st,3,1);
delete(st,1,1);
for i:=1 to length(st) do
      begin
      val(st[i],doi);
      a[i]:=doi;
end;
end;
begin
if ((n mod m=0)) or ((n mod m)= (frac(n/m))) then
      kt:=false
      else
      begin
      cd;
      xuli;
      kt:=true;
      end;
      end;

begin
clrscr;
write(' nhap n la ');
readln(n);
repeat
write(' nhap m la ');
readln(m);
until m<>0;
if kt then
begin
write(' chu ky la ');
for i:=1 to vt do
      write(a[i]);
      end
      else
      write(' chu ky bang 0 ');
readln;
end.

avatar
Nguyễn Ngọc Thiên
Teen Chính hiệu
Teen Chính hiệu

Posts : 19
Reputation : -179986
Join date : 06/11/2018
Age : 14
Location : Bình tường, Tây Sơn, Bình Định

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Bài 5 HSG 1819

Bài gửi by Sponsored content


Sponsored content


Về Đầu Trang Go down

Về Đầu Trang


 
Permissions in this forum:
Bạn không có quyền trả lời bài viết