• 締切済み

積分の問題教えてください。

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0014&lang=jp こちらのサイトの、積分の問題なのですが、 3つの線で囲まれる部分の面積を求める方法について考えます。高校で学習する積分を利用するとその面積は 72000000 であるとわかりますがと記載されているのですが、 なぜそのようになるのか、わかりません。 サイトなどでもいいので、教えて下さい。 よろしくお願いします。

みんなの回答

  • f272
  • ベストアンサー率46% (8021/17145)
回答No.1

面積は高校で学習する積分を利用すると S=∫[0 to 600](x^2)dx だということがわかります。これを計算すると S=(1/3)(x^3)[0 to 600]=(1/3)(600^3)=72000000 積分については,例えば http://www.geisya.or.jp/~mwm48961/kou3/integral2.htm を読んで理解してください。

関連するQ&A

  • 会津オンラインジャッジでプログラムが受理されない

    http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0002&lang=jp ここにある問題を解いて下のリンクのプログラムを実行してもWrong Answerになってしまい、うまくいきません。 https://gist.github.com/2437463 Sample Input: 5 7 1 99 1000 999 Output: 2 3 4 ちゃんと出力は合っているはずなのですが...。

  • 再帰の問題です。

    AOJの問題で、C言語で書いています。 ある解答者様のコードが自分の理解に深まると思い、見ているのですが、解答者様の作った関数のところの動作がよくわかりません。 問題です。 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0030&lang=jp 解答例です。分かるところ、分からないところを書いていきます。 #include<stdio.h> int n,s,a;//グローバル変数。 void dfs(int i,int sum,int m){//ここでいう、i,sum,mが何を指しているのか分かりません。 if(m==0 && sum==s){a++;return;} if(i==10 || m==0)return; dfs(i+1,sum+i,m-1);/*再帰をしています。しかし、どうしてここに自分と同じ関数を2つ、入れている   のか、分かりません。あと、どうしてiを足したり、1引いた数を代入しているのでしょうか?*/ */ dfs(i+1,sum,m);   } int main(){ while(scanf("%d%d",&n,&s)!=EOF){//Ctrl+zを押さない限り、無限ループします。 if(n==0 && s==0)break;//問題文通り、2つとも0だったらループを表すwhileから抜けます。 a=0; dfs(0,0,n);//ここもわからないです。ただ、関数dfsの動きが分かれば、分かると思います。 printf("%d\n",a); } return 0; } 再帰は今苦戦していますので、ここでもっと理解を深め、自作関数で使えるようになりたいです。 長文失礼しました。 よろしくお願いします。

  • Online judgeのデータ入力について

    部活動のプログラミングの特訓のため Aizu Online Judgeを始めました。 入力回数が決まっている、入力回数が入力データの1行目にあるという問題が これまで解いてきた問題の形式だったのですが、 問題セット、Volume0のDigit Number(これに限ったことではありませんが)のような 問題:http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/description.jsp?id=0002&lang=jp 入力データの数が明らかでない問題の入力をどのように 最後まで行ったら止められるのかが分かりません。 使用言語はJavaで、これまでの問題はScannerクラスのnextInt()等で読み込みを行ってました。 現在の状況では(下のソース)最後のデータを読んだ跡にまだ入力待ちになってしまっています。 似たような質問もあったのですが、Javaでなかったのでよく分かりませんでした すみませんが分かるかたは是非教えてください ------------------------------------------------- import java.util.Scanner; class DigitN{ static int a,b; static String s; public static void main(String[] args){ Scanner scan=new Scanner(System.in); while(true){ a=scan.nextInt(); b=scan.nextInt(); if(a<0||b<0) break; s=Integer.toString(a+b); System.out.println(s.length()); } } } ----------------------------------------------------

    • ベストアンサー
    • Java
  • 販売金額の合計などを求める問題

    こんばんわ。 私はC/C++プログラミングの勉強をしていて、下記の会津大学のonline judgeを利用させて頂いています。 http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/problem.jsp?vol=0&id=0045&tle=1&mle=32768&title=Sum%20and%20Average&doc=1&lang=jp この問題を解いているのですが、以下のプログラムを提出するとWrong Answerとなってしまいます。 何度も試行錯誤したのですが、恥ずかしながらWrongAnswerとなってしまう理由がどうしてもわかりません。 どなたかこのプログラムの誤りを指摘して頂けないでしょうか? よろしくお願い致します。 開発言語はC++です。 --------------------------ここから-------------------------- #include <iostream> using namespace std; int main(){ int i,j=0; int sales_sum=0,amount_sum=0; double ave; int cost[1000],amount[1000]; //データを読み込む while(scanf("%d,%d",&cost[j],&amount[j]) != EOF){ j++; } //合計金額と合計数量を計算する for(i=0;i<j;i++){ sales_sum += cost[i] * amount[i]; amount_sum += amount[i]; } //数量の平均を計算する ave = (double)amount_sum / (double)j; //出力 printf("%d\n%.0lf\n",sales_sum,ave); return 0; } --------------------------ここまで--------------------------

  • 線積分の座標変換?ヤコビアン?

    積分の座標変換のことについて質問です。 2重積分や3重積分では、 x=x(u,v), y=y(u,v) などとおいたとき、ヤコビアン J を用いて ∫f(x,z)dxdz = ∫f(x(u,v), y(u,v)) |J| dudv となることはわかりました。|J|は面積の比を表すということもわかりました。しかし、線積分の場合どうなるかわかりません。 曲線の長さに沿った積分 ∫f(x,z)ds は、変数変換したあとはどのように表されるのでしょうか? おそらく、変数変換前後の線素?の長さの比が入るのだと思うのですが・・・

  • icpcの過去問

    問題→ http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1147&lang=jp 自分の回答→ #include <iostream> using namespace std; int numbers[105]; int order(int n,int num){ if(num==0){numbers[0]=n;} else{ for(int i=0;i<num;i++){ if((numbers[num-(i+1)])>n){//cout << "here1"; numbers[num-i]=numbers[num-(i+1)];//cout << "here2"; numbers[num-(i+1)]=n;//cout << "here3"; } } } return 0; }//昇順に並べる int main(){ int n; while(cin>>n,n){ int count,answer; for(int i=0;i<n;i++){int Numb; cin >> Numb;if(i==2){cout << "here";} order(Numb,i); count++; }//昇順に要素が並んだ for(int i=1;i<count-1;i++){ answer += numbers[i]; } answer = answer/(count-2); cout << answer << endl; } } 実行結果→ 3 7 6 5 Bus error となってしまいます。最後の入力の時に、cinされずにbuserrorになるのですがなぜなのでしょうか。

  • AOJの問題で、質問があります。

    AOJの問題で考えても全然わからない問題があり、他の人の解答例を参考にしようと思い、見てみたのですが、一つ分からないところがあり、質問させていただきます。 問題です。 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0089 自分が参考にしている解答例です。 http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=570672 以下は分かっていないところを書かせていただきます。 なお、コードは解答例と同じです。 include <stdio.h> #include <string.h> int max(int a,int b){ return (a > b) ? a : b; } /*上の数、i-1行目の数から、i行目の大きい数をとっていく関数だと思いましたが、じっくり考えてみると、何パターンかのdataの足し算をしていることに気づきました。まずは左端のみ足す場(data[i+1][0] += data[i][0];)、次に右端だけを足す場合( data[i+1][i+1] += data[i][i];) 、そして for(j = 1;j <= i;j++){ data[i+1][j] += max(data[i][j-1],data[i][j]); } という、端以外の数から足すものです。ここで分からないことは ・このdata[i+1][j] += max(data[i][j-1],data[i][j]);という解答はi+1行目から、i行目の大きな数を選んでいますが、i行目からi+1行目の隣の大きいほうの数を足すようにしないと、ただしい経路は求まらないと思うのですが、どうでしょうか?また、端のみを足しているdataは、どういう役割をしているのでしょうか? 試しに端だけを足す式を削除したら、間違いとなってしまいます。また、この関数はreturn などがないですが、どの値が残るのでしょうか?main関数内では、どのような役割をするのでしょうか?*/ void solve(int data[100][50],int cnt){ int i,j; for(i = 0;i < cnt/2;i++){ data[i+1][0] += data[i][0]; for(j = 1;j <= i;j++){ data[i+1][j] += max(data[i][j-1],data[i][j]); } data[i+1][i+1] += data[i][i]; } for(i = cnt/2+1;i < cnt;i++){ for(j = 0;j < cnt-i;j++){ data[i][j] += max(data[i-1][j],data[i-1][j+1]); } } } int main(){ int h,i,j,cnt,len,num; int data[100][50]; char str[1024]; memset(data,0,sizeof(data)); i = 0; cnt = 0; while(scanf("%s",str) != EOF){ h = 0; j = 0; len = strlen(str); while(h <= len){ if(h < len && str[h] != ','){ num = 0; while(h < len && str[h] != ','){ num *= 10; num += str[h]-'0'; h++; } data[i][j] = num; j++; } h++; } i++; cnt++; } solve(data,cnt);//ここでは、計算した結果、どのような値が帰ってくるのでしょうか? printf("%d\n",data[cnt-1][0]); return 0; } 長文失礼しました。 よろしくお願いします。

  • 以下のソースコードについて

    #include<stdio.h> #include<stdlib.h> #include<string.h> int top, S[1000]; void push(int x) { S[++top] = x; } int pop() { top--; return S[top + 1]; } int main() { int a, b; top = 0; char s[100]; while (scanf_s("%s", s) != EOF) { if (s[0] == '+') { a = pop(); b = pop(); push(a + b); } else if (s[0] == '-') { b = pop(); a = pop(); push(a - b); } else if (s[0] == '*') { a = pop(); b = pop(); push(a*b); } else { push(atoi(s)); } } printf("%d\n", pop()); return 0; } このコードはプログラミングコンテストのためのアルゴリズムとデータ構造という本に 書かれていたコードで、項目はスタック構造に当たるものです。このコードを写してVIsual C++ に通したところ(バージョンは2015)エラーが発生しました。 どうしたらよいでしょうか 問題のURLはhttp://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_3_A です。言語はCです。

  • 三角形の外接円の中心と半径を出力するcプログラム

    http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0010&lang=jp この問題で、sample inputのデータを入力すると問題なく出力されるのですが、コードを提出するとなぜかWrong Answer となってしまいます。 どこがおかしいのか教えてください。。 #include<stdio.h> #include<math.h> int main(){ double x1,x2,x3,y1,y2,y3,p,q,r; int i,n; scanf("%d",&n); for(i=0;i<n;i++){ scanf("%lf %lf %lf %lf %lf %lf",&x1,&y1,&x2,&y2,&x3,&y3); p = ((y1-y3)*(y1*y1-y2*y2+x1*x1-x2*x2)-(y1-y2)*(y1*y1-y3*y3+x1*x1-x3*x3))/(2*(y1-y3)*(x1-x2)-2*(y1-y2)*(x1-x3)); q = ((x1-x3)*(x1*x1-x2*x2+y1*x1-y2*x2)-(x1-x2)*(x1*x1-x3*x3+y1*y1-y3*y3))/(2*(x1-x3)*(y1-y2)-2*(x1-x2)*(y1-y3)); r = sqrt((x1-p)*(x1-p)+(y1-q)*(y1-q)); printf("%.3f %.3f %.3f\n",p,q,r); } return 0; }

  • このソースコードについて

    AOJにてこのコードを提出したところTime Limit Exceededでドロップされました。 Visual studio 2013 で動かしたところ特に怪しい挙動や間違いを出力することはなかったのですが。。。 ちなみに言語はC++です。 問題のURL http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0056 #include<iostream> #include<math.h> using namespace std; int p[20000],d; void primefinder(int a){ p[0] = 2; int k, l = 0; for (int i = 3; i <= a; i++){ k = (int)sqrt(i); for (int j = 2; j <= k + 1; j++){ if (j == k + 1){ p[++l] = i;} else if (i%j == 0)break; } } d = l + 1; } int main(){ int n,m,q,count; while ((cin >> n), n){ count = 0; m = n / 2; primefinder(m); for (int i = 0; i < d; i++){ q = n - p[i]; if (q <= 1)continue; for (int j = 2; j <= (int)sqrt(q)+1; j++){ if (j == (int)sqrt(q) + 1)count++; else if (q%j == 0)break; } } cout << count << endl; } }