It's not me posted if you can remove it? Thanks! Edited by author 24.03.2013 19:47 /del Edited by author 18.03.2013 20:01 What does the program output for n=0? What's going on?! I've now any errors and warnings. I'm using only <iostream.h>. > What's going on?! > I've now any errors and warnings. > I'm using only <iostream.h>. #include <iostream.h> int main(void) { unsigned int n; cin>>n; char *a,*val; unsigned int na; a=new char[2000]; val=new char[4]; if(n==0) { cout<<'0'; return 0; } a[0]='s'; a[1]='i'; a[2]='n'; a[3]='('; a[4]='1'; a[5]=')'; a[6]=0; na=6; unsigned int j; for(unsigned int i=0;i<n-1;i++) cout<<'('; for(unsigned int i=2;i<=n;i++){ cout<<a; cout<<'+'; cout<<(n-i+2); cout<<')'; //изменение а na=na-i+1; //игнорируем скобки справа if((i % 2)==0) a[na]=(char)'-'; else a[na]='+'; a[na+1]='s'; a[na+2]='i'; a[na+3]='n'; a[na+4]='('; na+=5; if(i<10){ val[0]=(char)('0'+i); val[1]=0; } else if(i<100) { val[0]=(char)('0'+i/10); val[1]=(char)('0'+i-i/10*10); val[2]=(char)0; } else { val[0]=(char)('0'+i/100); val[1]=(char)('0'+(i-i/100*100)/10); val[2]=(char)('0'+i-i/10*10); val[3]=(char)0; } j=0; while(val[j]!=0){ a[na]=val[j]; j++; na++; } for(j=0;j<i;j++) a[na+j]=')'; na+=j; a[na]=0; } cout<<a; cout<<"+1"; return 0; } > > > What's going on?! > > I've now any errors and warnings. > > I'm using only <iostream.h>. > #include <iostream.h> > > int main(void) > { > unsigned int n; > cin>>n; > char *a,*val; > unsigned int na; > > a=new char[2000]; > val=new char[4]; > > if(n==0) > { > cout<<'0'; > return 0; > } > > a[0]='s'; > a[1]='i'; > a[2]='n'; > a[3]='('; > a[4]='1'; > a[5]=')'; > a[6]=0; > na=6; > > unsigned int j; > > for(unsigned int i=0;i<n-1;i++) //~~~~~~~~~~~~~~~ > cout<<'('; > > for(unsigned int i=2;i<=n;i++){ //~~~~~~~~~~~~~~~redefinition > cout<<a; > cout<<'+'; > > cout<<(n-i+2); > cout<<')'; > > //§Ъ§Щ§Ю§Ц§Я§Ц§Я§Ъ§Ц §С > na=na-i+1; //§Ъ§Ф§Я§а§в§Ъ§в§е§Ц§Ю §г§Ь§а§Т§Ь§Ъ §г§б§в§С§У§С > if((i % 2)==0) > a[na]=(char)'-'; > else > a[na]='+'; > a[na+1]='s'; > a[na+2]='i'; > a[na+3]='n'; > a[na+4]='('; > na+=5; > if(i<10){ > val[0]=(char)('0'+i); > val[1]=0; > } > else if(i<100) > { > val[0]=(char)('0'+i/10); > val[1]=(char)('0'+i-i/10*10); > val[2]=(char)0; > } > else > { > val[0]=(char)('0'+i/100); > val[1]=(char)('0'+(i-i/100*100)/10); > val[2]=(char)('0'+i-i/10*10); > val[3]=(char)0; > } > j=0; > while(val[j]!=0){ > a[na]=val[j]; > j++; > na++; > } > for(j=0;j<i;j++) > a[na+j]=')'; > na+=j; > > a[na]=0; > } > > cout<<a; > cout<<"+1"; > > return 0; > } > > > THIS CODE WILL LEAD YOU TO AC (PAY ATTENTION TO CORRECTIONS): #include <iostream> //not # include <iostream.h> using namespace std; //to be able to use cin,cout and many other functions int main(void) { unsigned int n; cin>>n; char *a,*val; unsigned int na; a=new char[2000]; val=new char[4]; if(n==0) { cout<<'0'; return 0; } a[0]='s'; a[1]='i'; a[2]='n'; a[3]='('; a[4]='1'; a[5]=')'; a[6]=0; na=6; unsigned int j; for(unsigned int i=0;i<n-1;i++) cout<<'('; for(unsigned int i=2;i<=n;i++){ cout<<a; cout<<'+'; cout<<(n-i+2); cout<<')'; //изменение а na=na-i+1; //игнорируем скобки справа if((i % 2)==0) a[na]=(char)'-'; else a[na]='+'; a[na+1]='s'; a[na+2]='i'; a[na+3]='n'; a[na+4]='('; na+=5; if(i<10){ val[0]=(char)('0'+i); val[1]=0; } else if(i<100) { val[0]=(char)('0'+i/10); val[1]=(char)('0'+i-i/10*10); val[2]=(char)0; } else { val[0]=(char)('0'+i/100); val[1]=(char)('0'+(i-i/100*100)/10); val[2]=(char)('0'+i-i/10*10); val[3]=(char)0; } j=0; while(val[j]!=0){ a[na]=val[j]; j++; na++; } for(j=0;j<i;j++) a[na+j]=')'; na+=j; a[na]=0; } cout<<a; cout<<"+1"; return 0; } Edited by author 07.10.2012 01:31 Edited by author 07.10.2012 01:31 Program T1149; Var i,n:1..200; op:text; Procedure a(p:integer); Var i,j:integer; Begin For i:=1 to p do Begin write('sin'); if i=p then Begin write('(',i,')');break;end else If odd(i) then write('(',i,'-') else write('(',i,'+'); end; end; Procedure s(n:integer); Var i,j,k:integer; Begin k:=n; For i:=1 to n-1 do write('('); For i:=1 to n-1 do Begin a(i);write('+',k-i+1,')'); End; a(n); end; Begin Readln(n); s(n); For i:=1 to n-1 do write(')');write('+1'); Readln End. You get WA on test #1. Can't you fix it yourself? #include<stdio.h> void A(int i) { int n; for(n=1;n<i;n++) printf("sin(%d+",n); printf("sin(%d",i); for(n=1;n<=i;n++) printf(")"); } void S(int i) { int n; for(n=1;n<i;n++) printf("("); for(n=1;n<i;n++) { A(n); printf("+%d)",i-n+1); } A(i); printf("+1"); } main() { int n; scanf("%d",&n); S(n); } >Hei, it is OK your pogram, just have a look at the sample output - you have to change the sign "+" and "-" - your program outputs just sign "+" - you have to change the sign each time - that is it. I think, you will get accepted - TRY IT!!!!! Thank you for your information.But I still misunderstand your meaning Please explain more details Thanks Again!!! As I saw our program, you for n=3 your putput is: ((sin(1)+3)sin(1+sin(2))+2)sin(1+sin(2+sin(3)))+1 But have a look at the sample putput - it is: ((sin(1)+3)sin(1-sin(2))+2)sin(1-sin(2+sin(3)))+1 The signs "+" and "-" !!! Your program outputs just "+"!!!!!! TEst your program and the sample outout - you'l see! If you haven't anderstood me,write me again... Bye! > I am always wrong Sounds like a logical fallacy, lol :D "i'm lying" Just change 5th line from printf("sin(%d+",n); to printf("sin(%d%c", n, n & 1 ? '-' : '+'); import java.util.*; public class Problem {
public static void a(int n) { for(int i=1;i<=n;i++){ if(i==n){ System.out.print("sin("+Integer.toString(i)); }else{ if(i%2==1){ System.out.print("sin("+Integer.toString(i)+"-"); }else{ System.out.print("sin("+Integer.toString(i)+"+"); } } } for(int i=0;i<n;i++){ System.out.print(")"); } }
public static void s(int n){ for(int i=0;i<n-1;i++){ System.out.print("("); } for(int i=1;i<n;i++){ a(i); System.out.print("+"+Integer.toString(n+1-i)+")"); } a(n); System.out.print("+1"); }
public static void main (String[] args) { try {
Scanner in = new Scanner(System.in);
int n=in.nextInt();
s(n);
} catch (Exception ex) {
System.out.println(ex.toString()); } } } Using string is more convenient. var n1,n,i:integer; a:array[1..200] of string; s,s1:string; procedure zap(x:integer); var i,k:integer; s,s1,s2,s3:string; begin a[1]:='sin(1)'; for i:=2 to x do begin s:=a[i-1]; for k:=length(s) downto 1 do if (s[k]>='0') and (s[k]<='9') then begin str(i-1,s3); delete(s,k+1-length(s3),length(s3));break end; if i mod 2=0 then begin str(i-1,s1); str(i,s2); s1:=s1+'-'+'sin'+'('+s2+')'; insert(s1,s,k+1-length(s3)); end else begin str(i-1,s1); str(i,s2); s1:=s1+'+'+'sin'+'('+s2+')'; insert(s1,s,k+1-length(s3)); end; a[i]:=s; end; end; begin read(n); zap(n); n1:=n-1; str(n,s1); s:='('+a[1]+'+'+s1+')'; for i:=2 to n-1 do begin str(n1,s1); s:='('+s+a[i]+'+'+s1+')'; n1:=n1-1; end; s:=s+a[n]+'+'+'1'; if n=1 then writeln(a[1]+'+'+'1') else writeln(s); end. You will get the same verdict writing the same in other languages... I wrote same solution on pascal and crying now :( MLE 4 How to fix the algorythm for using less memory? Edited by author 30.11.2010 19:55 Only print strings, do not concatenate. Oh, thankyou, it's so EASY! Now, i've got AC :) var n:byte; procedure a(now,step:byte); begin if now=step then write('sin(',now,')') else begin write('sin(',now); if now mod 2=1 then write('-') else write('+'); a(now+1,step); write(')'); end; end; procedure s(step:byte); begin if step=1 then begin write('('); a(1,step); write('+',n-step+1,')'); end else begin if step<>n then write('('); s(step-1); a(1,step); write('+',n-step+1); if step<>n then write(')'); end; end; begin readln(n); s(n); writeln; end. var n:byte; procedure a(now,step:byte); begin if now=step then write('sin(',now,')') else begin write('sin(',now); if now mod 2=1 then write('-') else write('+'); a(now+1,step); write(')'); end; end; procedure s(step:byte); begin if step=1 then begin if step<>n then write('('); a(1,step); write('+',n-step+1); if step<>n then write(')'); end else begin if step<>n then write('('); s(step-1); a(1,step); write('+',n-step+1); if step<>n then write(')'); end; end; begin readln(n); s(n); writeln; end. in 5 out ((((sin(1)+5)sin(1-sin(2))+4)sin(1-sin(2+sin(3)))+3)sin(1-sin(2+sin(3-sin(4))))+2)sin(1-sin(2+sin(3-sin(4+sin(5)))))+1 Edited by author 08.11.2009 23:59 Otherwise you'll UAC Edited by author 15.09.2007 20:04 Excuse me for bad English. Why I have error of Memory Limit? There is my code: [code] {$APPTYPE CONSOLE} var n:byte; function inttostr(a:byte):string; var m:byte;e:char;s:string; begin while 12=12 do begin m:=a mod 10; a:=a div 10; case m of 0:e:='0';1:e:='1';2:e:='2';3:e:='3';4:e:='4';5:e:='5'; 6:e:='6';7:e:='7';8:e:='8';9:e:='9';end; s:=e+s; if a=0 then break; end; inttostr:=s; end; function sinus(n:byte):string; var w:char;i:byte;s:string;s2:string[12]; begin for i:=n downto 1 do begin if odd(i)then w:='-' else w:='+'; s2:='sin('+inttostr(i)+')'; if i<n then s:='sin('+inttostr(i)+w+s+')' else s:=s2; end; sinus:=s; end; function dance(n:byte):string; var i:byte;s:string;s2:string[12]; begin for i:=n downto 1 do begin s2:=sinus(n-i+1)+'+'+inttostr(i); if i<n then s:='('+s+')'+s2 else s:=s2; end; dance:=s; end; begin readln(n); if n=0 then writeln('sin(0)+1')else writeln(dance(n)); readln; end. [/code] i found my mistake :) Edited by author 19.02.2006 18:34 Program P1149; Var Temp,N:Integer; Procedure A(Num:Integer); Var Temp:Integer; Begin For Temp:=1 To Num Do Begin Write('sin('); If Temp=Num Then Write(Num,')') Else If Temp=1 Then Write(Temp,'-') Else Write(Temp,'+'); End; For Temp:=1 To Num-1 Do Write(')'); End; Begin Readln(N); For Temp:=1 To N-1 Do Write('('); For Temp:=1 To N Do Begin A(Temp); Write('+',N-Temp+1); If Temp<>N Then Write(')'); End; End. #include <iostream> using namespace std; void cout_a(int m,int n){ if(m==n) cout<<"sin("<<n<<")"; else{ cout<<"sin("<<m<<"+"; cout_a(m+1,n); cout<<")"; } } void cout_s(int m,int n){ if(m==1){ cout_a(1,1); cout<<"+"<<n; } else{ cout<<"("; cout_s(m-1,n); cout<<")"; cout_a(1,m); cout<<"+"<<n+1-m; } } int main(void){ int n; cin>>n; cout_s(n,n); cout<<endl; return 0; } I know.I am using GB2312.So I see -s as –s. The following is the AC code. #include <iostream> using namespace std; void cout_a(int m,int n){ if(m==n) cout<<"sin("<<n<<")"; else{ cout<<"sin("<<m; if(m%2==1) cout<<"-"; else cout<<"+"; cout_a(m+1,n); cout<<")"; } } void cout_s(int m,int n){ if(m==1){ cout_a(1,1); cout<<"+"<<n; } else{ cout<<"("; cout_s(m-1,n); cout<<")"; cout_a(1,m); cout<<"+"<<n+1-m; } } int main(void){ int n; cin>>n; cout_s(n,n); cout<<endl; return 0; } Why my program wrong? Program T1149; Var i,n:1..200; Procedure a(p:integer); Var i,j:integer; Begin For i:=1 to p do Begin write('sin'); if i=p then Begin write('(',i,')');break;end else If odd(i) then write('(',i,'-') else write('(',i,'+'); end; end; Procedure s(n:integer); Var i,j,k:integer; Begin k:=n; For i:=1 to n-1 do write('('); For i:=1 to n-1 do Begin a(i);write('+',k-i+1,')'); End; a(n);write('+1'); end; Begin Readln(n); s(n); For i:=1 to n-1 do write(')'); Readln End. program sinus; var i,n,depth:integer; procedure calc(i:integer); var j:integer; begin if i=depth+1 then for j:=1 to depth do write(')') else begin write('sin(',i); if i<depth then if odd(i) then write('-') else write('+'); calc(i+1); end; end; begin readln(n); for i:=1 to n-1 do write('('); for i:=1 to n-1 do begin depth:=i; calc(1); write('+',n-i+1,')'); end; depth:=n; calc(1); writeln('+1'); end. var i,n:byte; procedure a(g:byte); var i:byte; begin for i:=1 to g-1 do write('sin(',i,'+'); write('sin(',g); for i:=1 to g do write(')'); end; begin readln(n); for i:=1 to n-1 do write('('); for i:=1 to n-1 do begin a(i); write('+',n+1-i,')'); end; a(n); write('+1'); end. > var i,n:byte; > > procedure a(g:byte); > var i:byte; > begin > for i:=1 to g-1 do write('sin(',i,'+'); > write('sin(',g); > for i:=1 to g do write(')'); > end; > > begin > readln(n); > for i:=1 to n-1 do write('('); > for i:=1 to n-1 do > begin > a(i); > write('+',n+1-i,')'); > end; > a(n); > write('+1'); > end. where is the subtraction sign? > where is the subtraction sign? OH! Thank you. I am so foolish. |
|