70 条题解
-
-1wagnfzwxl LV 8 @ 2016-11-20 21:43:28
var a:ansistring; b:array[1..100000]of longint; i,n,j,k,num1,num2,x,t:longint; function pd(n:longint):boolean; begin if n in [48..57] then pd:=false else pd:=true; end; begin while not eof do begin readln(a); n:=length(a); if pd(ord(a[1])) then begin i:=2;x:=0;j:=1;num1:=1; while i<n do begin repeat x:=x*10+(ord(a[i])-ord('0')); inc(i); until (pd(ord(a[i]))) or (i>n); inc(i); b[j]:=x; x:=0; inc(j); end; dec(j); if j=1 then writeln(b[1]) else begin num2:=b[j]; for k:=j downto 1 do begin num1:=b[k-1]num2+num1; t:=num1; num1:=num2; num2:=t; end; writeln(num1,'/',num2); end; end else begin i:=1;x:=0;j:=0;num1:=0;num2:=0; while i<=n do begin repeat x:=x10+(ord(a[i])-ord('0')); inc(i); until (pd(ord(a[i]))) or (i>n); inc(i); if j=0 then begin num1:=num1+x; inc(j); x:=0; end else num2:=num2+x; end; if num2=0 then writeln('[',num1,']')else if num1 mod num2=0 then writeln('[',num1 div num2,']') else begin write('['); for k:=1 to 1000 do begin b[k]:=num1 div num2; num1:=num1 mod num2; t:=num1; num1:=num2; num2:=t; if k=1 then write(b[k],';') else if num2<1 then begin writeln(b[k],']');break;end else write(b[k],','); end; end; end; end; end.
-
-12016-05-26 21:17:40@
program lx; var str:string; flag,s:longint; a:array [1..1000] of longint; procedure init; var sum,i,weight:longint; ok:boolean; begin readln(str); if str[length(str)]=']' then flag:=0 else flag:=1; weight:=1; s:=0; i:=length(str); while i>0 do begin sum:=0; ok:=false; weight:=1; while str[i] in ['1'..'9'] do begin ok:=true; sum:=sum+(ord(str[i])-ord('0'))*weight; weight:=weight*10; dec(i); end; if ok then begin inc(s); a:=sum; end; dec(i); end; if flag=0 then if str[2]='-' then a:=a*(-1); if flag=1 then if str[1]='-' then a:=a*(-1); end; function gcd(a,b:longint):longint; begin if b=0 then gcd:=a else gcd:=gcd(b,a mod b); end; procedure work0; var fm,fz,i,temp:longint; begin fm:=a[1]; fz:=1; for i:=2 to s do begin fz:=fz+a[i]*fm; temp:=fz; fz:=fm; fm:=temp; end; if fz div gcd(fz,fm)=1 then writeln(fm div gcd(fz,fm)) else if fz div gcd(fz,fm)<0 then writeln((fm div gcd(fz,fm))*(-1),'/',(fz div gcd(fz,fm))*(-1)) else writeln(fm div gcd(fz,fm),'/',fz div gcd(fz,fm)); end; procedure work1; var fz,fm,k,temp,h:longint; ok:boolean; begin write('['); fz:=a[2]; fm:=a[1]; if fz>=0 then begin k:=gcd(fz,fm); fz:=fz div k; fm:=fm div k; write(fz div fm,';'); end else begin h:=0; while fz<0 do begin inc(fz,fm);dec(h);end; write(h,';'); end; fz:=fz mod fm; ok:=false; while fz<>1 do begin temp:=fz; fz:=fm; fm:=temp; if not ok then begin write(fz div fm);ok:=true;end else write(',',fz div fm); fz:=fz mod fm; end; writeln(',',fm,']'); end; begin while not eof do begin init; if flag=0 then work0 else work1; fillchar(a,sizeof(a),0); str:=''; end; end.
-
-12016-03-13 13:07:47@
uses math; function gcd(a,b:longint):longint; begin if b=0 then gcd:=a else gcd:=gcd(b,a mod b); end; //繁分数->分数 procedure transto(var s:string); var i,b,x,n,d,code:longint;temp:string; a:array[0..200] of longint; len:longint; begin len:=0; n:=0;d:=0; for i:=length(s)-1 downto 1 do begin if (s[i]=',') or (s[i]=';') or (s[i]='[') then begin val(copy(s,i+1,len),x,code); if d=0 then begin n:=1;d:=x end else begin n:=x*d+n; code:=n;n:=d;d:=code; end; len:=0 end else inc(len); end; code:=n;n:=d;d:=code; code:=gcd(n,d);n:=n div code;d:=d div code; if d=1 then str(n,s) else begin str(n,s); str(d,temp); s:=s+'/'+temp; end; end; //分数->繁分数 procedure transfrom(var s:string); var n,i,d,code,g:longint;res,temp:string; begin i:=-1; for i:=1 to length(s) do if s[i]='/' then begin val(copy(s,1,i-1),n,code); val(copy(s,i+1,length(s)-2),d,code); end; if i=-1 then begin write(s);exit end; g:=gcd(n,d);n:=n div g;d:=d div g; if n mod d=0 then begin write(n div d);exit end; str(n div d,temp); res:='['+temp+';'; code:=d;d:=n mod d;n:=code; while d<>1 do begin str(n div d,temp); res:=res+temp+','; code:=d;d:=n mod d;n:=code; if d=0 then begin write(n div d);break end; end; if n<>1 then begin str(n,temp); res:=res+temp+','; end; res[length(res)]:=']'; s:=res; end; var s:string; a:array[0..100] of string; i,count:longint; begin //main while not eof do begin readln(s); if s[1]='[' then transto(s) else transfrom(s); inc(count); a[count]:=s; end; for i:=1 to count do writeln(a[i]); end.
-
-12009-11-10 10:39:27@
楼下的说得很对
注意了:[4]---|4
2/1---|[2]
就ac了 -
-12009-11-09 21:54:50@
这个C++真的很诡异:
不同的读入方式分数居然不一样………………
cin>>s;
while(!cin.eof())
{top=0;
memset(a,0,sizeof(a));
if(s[0]=='[') solve1();
else solve2();
cin>>s;
}
20分,除第四点外其余全错
while(!cin.eof())
{cin>>s; top=0;
memset(a,0,sizeof(a));
if(s[0]=='[') solve1();
else solve2();
}
80分,第四个点错
do
{cin>>s; top=0;
memset(a,0,sizeof(a));
if(s[0]=='[') solve1();
else solve2();
}while(!cin.eof())
80分,第三个点格式错误 (- -!)最后,忍无可忍……
while(getline(cin,s))
{top=0;
memset(a,0,sizeof(a));
if(s[0]=='[') solve1();
else solve2();
}
终于AC用C++的同志看来得注意一下
-
-12009-11-08 23:28:10@
我终于知道了...
第4组有这种情况
[4]->4
2/1->[2]
而不是[4;]->4/1
!!!!!!!!!!!!!!!!
我的AC率.......... -
-12009-11-08 21:29:33@
├ 测试数据 04:答案正确... 0ms
BS这种无聊的题目……BS出题人这等恶心的数据……
-
-12009-11-08 20:49:16@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
交了无数次,提醒下大家在分数转连分数过程中有可能会有例如2/4的情况,所以不能以分子=1为退出条件 -
-12009-11-08 20:20:13@
就是哈,第4个点是什么回事啊 ??//
老是207???
哎,那个大牛提示一下????????/ -
-12009-11-08 18:58:33@
对此题极度。。无语。。
X/1 要输出 X 。。。 -
-12009-11-08 17:24:40@
谁能解释下题目?
-
-12009-11-08 14:17:11@
几个阴人的地方
- 3/1---|> 3
- [3;]---|>[3]
其中个人觉得第1点不合理 类似3这种,根本不是分数,应该写成3/1才对
- 3/1---|> 3
-
-12009-11-08 13:46:54@
第4个点到底是什么啊?
-
-12009-11-08 12:38:41@
第4个点到底什么意思啊!!!
-
-12009-11-08 11:22:52@
program lx;
var str:string;
flag,s:longint;
a:array [1..1000] of longint;
procedure init;
var sum,i,weight:longint;
ok:boolean;
begin
readln(str);
if str[length(str)]=']' then flag:=0 else flag:=1;
weight:=1;
s:=0;
i:=length(str);
while i>0 do
begin
sum:=0;
ok:=false;
weight:=1;
while str[i] in ['1'..'9'] do
begin
ok:=true;
sum:=sum+(ord(str[i])-ord('0'))*weight;
weight:=weight*10;
dec(i);
end;
if ok then
begin
inc(s);
a:=sum;
end;
dec(i);
end;
if flag=0 then
if str[2]='-' then a:=a*(-1);
if flag=1 then
if str[1]='-' then a:=a*(-1);
end;function gcd(a,b:longint):longint;
begin
if b=0 then gcd:=a
else gcd:=gcd(b,a mod b);
end;procedure work0;
var fm,fz,i,temp:longint;
begin
fm:=a[1];
fz:=1;
for i:=2 to s do
begin
fz:=fz+a[i]*fm;
temp:=fz;
fz:=fm;
fm:=temp;
end;
if fz div gcd(fz,fm)=1 then writeln(fm div gcd(fz,fm))
else if fz div gcd(fz,fm)=0 then
begin
k:=gcd(fz,fm);
fz:=fz div k;
fm:=fm div k;
write(fz div fm,';');
end
else
begin
h:=0;
while fz -
-12009-11-08 10:55:24@
悲剧啊,和ac程序输出一样,和测试数据也一样,却爆了一个点。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
-
-12009-11-08 16:13:21@
-
-12009-11-08 10:32:12@
VAR
a:array[1..2000]of longint;
s:string;
w,p,l,m,y,i,n,key,x:longint;function gcd(a,b:longint):longint;
begin
if b=0 then gcd:=a
else gcd:=gcd(b,a mod b);
end;procedure change(var a,b:longint);
var l:longint;
begin
l:=a;
a:=b;
b:=l;
end;procedure init;
begin
readln(s);if s[1]='['then
begin
y:=pos(';',s);if y=0 then begin val(copy(s,2,length(s)-2),x);writeln(x);exit;end;
w:=y;
val(copy(s,2,w-2),a[1]);
delete(s,1,w);
p:=1;repeat
inc(p);
w:=pos(',',s);
if w0 then
begin
val(copy(s,1,w-1),a[p]);
delete(s,1,w);
end;
until w=0;
l:=length(s);
val(copy(s,1,l-1),a[p]);
endelse
begin
y:=pos('/',s);
w:=y;
val(copy(s,1,w-1),a[1]);val(copy(s,w+1,length(s)-w),a[2]);
key:=gcd(a[1],a[2]);
a[1]:=a[1]div key; a[2]:=a[2]div key;
end;end;
procedure main;
begin
if y=0 then exit;
if p0then
begin
n:=a[p];
dec(p);
m:=a[p]*n+1;
change(m,n);if p>1 then
beginrepeat
dec(p);
m:=n*a[p]+m;
change(m,n);
key:=gcd(m,n);
m:=m div key;
n:=n div key;
until p=1;
end;
writeln(n, '/',m);
endelse
begin
if a[2]=1then begin writeln('[',a[1],']');exit;end;
write('[');
write(a[1]div a[2],';');
a[1]:=a[1]mod a[2];
change(a[1],a[2]);while a[2]1 do
begin
write(a[1]div a[2],',');
a[1]:=a[1]mod a[2];
change(a[1],a[2]);
end;
write(a[1],']'); writeln;
end
end;begin
while not eof do
begin
p:=0;
init;
main;
end;
end. -
-12009-11-08 10:19:07@
考的时候想到了X/1的情况,也写了,可就是没想到【X】的情况
比如【2,1】我答案是3,【3】就成了10/3了,悲剧 -
-12009-11-08 09:59:15@
呃呃呃
题目没说要把X/1输成X吧
难道是让我们去猜题目要求??