「AOJ再挑戦76~80」の編集履歴(バックアップ)一覧はこちら

AOJ再挑戦76~80 - (2014/02/02 (日) 17:23:24) の1つ前との変更点

追加された行は緑色になります。

削除された行は赤色になります。

*問76 Treasure Hunt2 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0076 宝の埋まってる座標をこたえる問題。 回転行列と漸化式の考えで求まります。 一般項を求めるのもありかもしれません。 #include<stdio.h> #include<math.h> int main(){ double xs[1002],ys[1002],dx,dy,len; xs[1]=1,ys[1]=0; for(int i=1;i<=1000;i++){ dx=-ys[i]; dy=xs[i]; len=hypot(dx,dy); xs[i+1]=xs[i]+dx/len; ys[i+1]=ys[i]+dy/len; } int n; while(1){ scanf("%d",&n); if(n==-1)break; printf("%lf\n%lf\n",xs[n],ys[n]); } } *問77 Run Length http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0077 圧縮された文字列を簡単な操作で複合する問題。 解法 @に出会ったらその処理をして出会わなかったらそのまま出力。 それだけ。 #include<stdio.h> int main(){ char text[101],c; while(scanf("%[^\n]%*c",text)!=EOF){ for(int i=0;text[i]!='\0';){ if(text[i]=='@'){ c=text[i+1]-'0'; while(c--)printf("%c",text[i+2]); i+=3; }else{ printf("%c",text[i]); i++; } } printf("\n"); } }
*問76 Treasure Hunt2 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0076 宝の埋まってる座標をこたえる問題。 回転行列と漸化式の考えで求まります。 一般項を求めるのもありかもしれません。 #include<stdio.h> #include<math.h> int main(){ double xs[1002],ys[1002],dx,dy,len; xs[1]=1,ys[1]=0; for(int i=1;i<=1000;i++){ dx=-ys[i]; dy=xs[i]; len=hypot(dx,dy); xs[i+1]=xs[i]+dx/len; ys[i+1]=ys[i]+dy/len; } int n; while(1){ scanf("%d",&n); if(n==-1)break; printf("%lf\n%lf\n",xs[n],ys[n]); } } *問77 Run Length http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0077 圧縮された文字列を簡単な操作で複合する問題。 解法 @に出会ったらその処理をして出会わなかったらそのまま出力。 それだけ。 #include<stdio.h> int main(){ char text[101],c; while(scanf("%[^\n]%*c",text)!=EOF){ for(int i=0;text[i]!='\0';){ if(text[i]=='@'){ c=text[i+1]-'0'; while(c--)printf("%c",text[i+2]); i+=3; }else{ printf("%c",text[i]); i++; } } printf("\n"); } } *問78 n*nの奇数サイズ魔法陣の生成を指定通りに実装する問題。 解法 生成手順は不思議なので結構追求したら深い意味はありそうですが。 実装する以外に特にすることがない問題でした。 #include<stdio.h> #include<string.h> int map[15][15]; void calc(int n){ memset(map,0,sizeof(map)); int x=n/2,y=n/2+1,t; for(int i=1;i<=n*n;i++){ map[y][x]=i; if(i==n*n)break; x=(x+1)%n; y=(y+1)%n; while(map[y][x]!=0){ x=(x-1+n)%n; y=(y+1)%n; } } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ printf("%4d",map[i][j]); } printf("\n"); } } int main(){ int n; while(1){ scanf("%d",&n); if(n==0)break; calc(n); } }

表示オプション

横に並べて表示:
変化行の前後のみ表示: