• 締切済み

javaのプログラミング(連続する整数の和)

javaのプログラミング(連続する整数の和) 大学で出た課題です。 「ある自然数nを入力し、n=○+○+…+○と連続する整数の和で表すプログラミングをつくれ。」というものです。 以下に、私が考えたものを載せます。これだと連続する2つの整数の和では表すことができるのですが、3つ以上の整数の和を表すことができません。どうすればよいでしょうか? import java.io.*; public class  n { public static void main(String[] args) { int n; BufferedReader rd = new BufferedReader(new InputStreamReader(System.in)); try{ String line; System.out.print("整数:"); line = rd.readLine(); n = Integer.parseInt(line); } catch(IOException e){ System.out.println("入力エラーが発生しました。"); return; } catch(NumberFormatException e){ System.out.println("整数を入力してください。"); return; } for(int i=1;i<=n;i++){ int k=i+1; if(i+k==n) System.out.println(i+"+"+k); } } }

みんなの回答

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.2

javaの質問ですが数学カテなので数学的に考察してみます。 もしnが3の倍数なら、例えばn=12の場合はn=4*3なので、 nは4を真ん中にした3個の数の合計となります。(n=3+4+5) もしnが5の倍数なら、例えばn=20の場合はn=4*5なので、 nは4を真ん中にした5個の数の合計となります。(n=2+3+4+5+6) つまり、nが奇数の倍数なら、n=m*(2k+1)とするとき、 nはmを真ん中にした(2k+1)個の数の合計になります。 n=(m-k)+(m-k+1)+・・・+(m-1)+m+(m+1)+(m+2)+・・・+(m+k) ただし、k≧mのときは(m-k)は負数になりますが、 m>0なので必ず(m-k)と相殺できる正数(k-m)の項が存在するので、 n=(k-m+1)+(k-m+2)+・・・+(m+k) となります。(項数は2m個) 例.n=90=2*3*3*5 の場合 3の倍数とみたとき、m=30,k=1 n=29+30+31 5の倍数とみたとき、m=18,k=2 n=16+17+18+19+20 9の倍数とみたとき、m=10,k=4 n=6+7+8+9+10+11+12+13+14 15の倍数とみたとき、m=6,k=7 n=2+3+4+5+6+7+8+9+10+11+12+13 45の倍数とみたとき、m=2,k=22 n=21+22+23+24 n=2^mとなる場合は、nを連続する2個以上の整数の和で表すことはできません。 javaのコーディング方法について知りたいなら、プログラミングのカテゴリーで質問してみてください。

全文を見る
すると、全ての回答が全文表示されます。
  • x1yobigun
  • ベストアンサー率18% (43/238)
回答No.1

エラトステネスの篩を、順次総なめにしているみたいな感じのアルゴリズムですね。 力任せにコーディングする前に分析しましょう。 n : 自然数 m : 整数(マイナス、0もOK) と考えて 連続2整数の和で表す方法 自然数 n が奇数のとき、つまり n=2m+1 => n=m+(m+1) 自然数 n が偶数のとき、つまり n=2m => (不可能)  なぜなら、連続2整数は、かならず奇数、偶数のペアであり、  和は必ず奇数になるから。 連続3整数の和で表す方法 整数 n が3の倍数のとき、つまり n=3m => (m-1) + m + (m+1) 整数 n が3を法として1になるとき、つまり n=3m+1 => (不可能) 整数 n が3を法として2になるとき、つまり n=3m+2 => (不可能)  なぜなら、連続3整数の和は、必ず3の倍数になるから。  (連続3整数の1つは必ず3の倍数、他は3を法として1、2になる   整数であるから。これで分かんないなら、力ずくで3パターン計算   して証明してもよい。)   3m + (3m+1) + (3m+2) = 9m+3 = 3(3m+1) (3m-1) + 3m + (3m+1) = 9m = 3(3m) (3m-2) + (3m-1) + 3m = 9m-3 = 3(3m-1) ・・・ 連続N整数の和で表す方法 ★再帰的呼び出しを使ってはどうでしょうか。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • javaプログラミングについて!

    ただいまjavaプログラミングの勉強をしております。 そこで数字を複数回入力させ、-1を入力すると終了し、その数字の最大、最小、平均を出力するプログラムを作っているのですが、 public static void main(String[] args) { int max = 0; int min = 100; int sum = 0; int count = 0; Scanner sc = new Scanner(System.in); System.out.println("正の整数を入力してください"); int n = sc.nextInt(); while (num01 != -1){ System.out.println("正の整数を入力してください"); sum += n; n = sc.nextInt(); count++; if(max < n) max = n; if(min > n) min = n; } System.out.println("入力された整数の最大は" + max); System.out.println("入力された整数の最小は" + min); System.out.println("入力された整数の平均は" + sum/count); } } このようなプログラミングが作れたのですが、たとえば30と10を入力したときに 最大10 最小-1 平均20 と表示されてしまいます。色々試行錯誤してみたのですが、改善されなかったため質問させて頂きました。原因と解決方法を教えて頂きたいです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • javaのfor文

    nの値の和を求めるのはこれ以外に書き方はありますか? import java.util.*; class SampleGoo{ public static void main(String args[]){ Scanner std = new Scanner(System.in); System.out.print("整数値:");int n = std.nextInt(); int ans = 0; for (int i = 1;i <= n;i++){ ans = ans + i; } System.out.println(Integer.toString(ans)); } }

  • javaのfor文

    nの値の和を求めるのはこれ以外に書き方はありますか? import java.util.*; class SampleGoo{ public static void main(String args[]){ Scanner std = new Scanner(System.in); System.out.print(\"整数値:\");int n = std.nextInt(); int ans = 0; for (int i = 1;i <= n;i++){ ans = ans + i; } System.out.println(Integer.toString(ans)); } }

  • コンパイル後のエラー。

    こんにちは、質問があります。 下のプログラムを組みました。 コンパイルには成功しましたが、実行することができません。 import java.io.*; public class Gyouretu { public static void main(String[] args) { BufferedReader reader = new BufferedReader( new InputStreamReader(System.in), 1); try{ System.out.println("行列数を入力"); String line = reader.readLine(); int n = Integer.parseInt(line); int a[][] = new int[n][n]; int b[][] = new int[n][n]; int c[][] = new int[n][n]; int i,j,k; for ( i = 0; i < n; i++){ for ( j = 0; j < n; j++){ c[i][j]=0; for ( k = 0; k < n; k++){ c[i][j] += a[i][k] * b[k][j]; System.out.print(c); System.out.print(i); System.out.print(j); } } } }catch (IOException e){ System.out.println("end"); } } } 行列の計算をするプログラムなのですが、コンパイル後に行列数(何行何列か?)を入力するとこんなエラーが出ます。 「'2' は、内部コマンドまたは外部コマンド、  操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 なぜなのか、どうしてもわかりません。 よろしくお願いします。

    • ベストアンサー
    • Java
  • JAVAの演習問題

    現在JAVAを独学中なのですが、以下の演習問題でつまずいております。 (解答がない演習問題なので、このサイトにて質問することにしました。) 実行例 1からnまでの和を求めます。 nの値:5 1から5までの和は15です。 (5はキーボードにて入力された値。15はその結果の値。) 自分の解答は以下になるのですが、実行例のようになりません。 ご解答頂けると大変助かります。 import java.util.Scanner; class Ensyuu413 { public static void main(String[] args) { Scanner stdIn = new Scanner(System.in); System.out.println("1からnまでの和を求めます。"); System.out.print("nの値:"); int n = stdIn.nextInt(); for ( int i = 0, j = 0; i <= n; i++, j += i) System.out.println("1から"+n+"までの和は"+j+"です。"); } }

  • JAVAの演習問題

    現在JAVAを独学中なのですが、以下の演習問題でつまずいております。 (解答がない演習問題なので、このサイトにて質問することにしました。) 実行例 1からnまでの和を求めます。 nの値:5 1から5までの和は15です。 (5はキーボードにて入力された値。15はその結果の値。) 自分の解答は以下になるのですが、実行例のように表示されません。 ご解答頂けると大変助かります。 import java.util.Scanner; class Ensyuu413 { public static void main(String[] args) { Scanner stdIn = new Scanner(System.in); System.out.println("1からnまでの和を求めます。"); System.out.print("nの値:"); int n = stdIn.nextInt(); for ( int i = 0, j = 0; i <= n; i++, j += i) System.out.println("1から"+n+"までの和は"+j+"です。"); } } 実行しますと、以下のように実行されてしまいます。 1からnまでの和を求めます。 nの値:5 1から5までの和は0です。 1から5までの和は1です。 1から5までの和は3です。 1から5までの和は6です。 1から5までの和は10です。 1から5までの和は15です。

  • [至急!]Javaのプログラミング

    野球のBSOカウンタを作ろうとしているのですが、エラーが出ないもののうまく動きません。動作としてはsと入力したらSのカウンタに「〇」を表示、といったことをO(アウト)カウンタが3つになるまで行うプログラムなのですが、入力と出力の両方をうまくループすることが出来ません。分かる方がいたら教えてください。私が作ったものは下のものです。これを改良して作っていただけると助かります。 import java.io.*; public class test1 { public static void main(String[] args) throws IOException { BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); //String str=br.readLine(); //char hantei=str.charAt(0); int sc=0,bc=0,oc=0; while(oc<3){ String str=br.readLine(); char hantei=str.charAt(0); if(hantei=='s') { sc=sc+1; if(sc==3) oc=oc+1; sc=0; bc=0; } else if(hantei=='b') { bc=bc+1; if(bc==4) sc=0; bc=0; } else if(hantei=='o') { oc=oc+1; sc=0; bc=0; } else { System.out.println("入力が違います。"); } } System.out.print("B "); for(int i=0;i<=bc;i++){ System.out.print("〇"); } System.out.println(""); System.out.print("S "); for(int i=0;i<=sc;i++){ System.out.print("〇"); } System.out.println(""); System.out.print("O "); for(int i=0;i<=oc;i++){ System.out.print("〇"); } System.out.println(""); } } 出力例 s(入力) B S 〇 O s(入力) B S 〇〇 O s(入力) B S O 〇 これをアウトカウントが3つになるまで行うプログラムです。

    • ベストアンサー
    • Java
  • JAVAのプログラムについて

    独学でJAVAを勉強中なのですが、 import java.io.*; public class ExserciseD5L3_2{ public static void main(String args[]){ BufferedReader br = new BufferedReader(newInputStreamReader(System.in),1); try{ System.out.println("■■■計算クイズ■■■"); System.out.println("計算してください。"); String Que[] = {"10×50=?","21-7=?","360÷6=?"}; int Ans[] = {500,14,60}; int counter; for(counter = 0; counter <=2; counter++ ){ System.out.println(Que[counter]); System.out.println("答えは?"); String str = br.readLine(); int i = Integer.parseInt(str); if(i == Ans[counter]){ System.out.println("おめでとう!大当たりです。"); } else{ System.out.println("残念!答えは"+Ans[counter]+"です。"); } } } catch(IOException e){ System.out.println("IOエラーが発生しました。"); } catch(NumberFormatException ne){ System.out.println("入力された数値が正しくないようです。"); } } } これを実行すると ■■■計算クイズ■■■ 計算してください。 10×50=? 答えは? 500 おめでとう!大当たりです。 21-7=? 答えは? 14 おめでとう!大当たりです。 360÷6=? 答えは? 60 おめでとう!大当たりです。 となるのですが、これに おめでとう!正解数は3つです。とか正解数は2つですなどのように 正解数も出るようにするにはどのようにしたらいいのでしょうか?

    • ベストアンサー
    • Java
  • プログラミングお願いします(JAVA)

    クラスCalcに、次の5つのメソッドを作成しなさい。メインメソッドでオブジェクトを生成し、メソッドを呼び出して、実行しなさい。 二つの整数を引数にもち、その和を戻り値とする wa (メソッド名はwaであることに注意!以下同様。) 二つの整数を引数にもち、その差を戻り値とする sa 二つの整数を引数にもち、その積を戻り値とする kake 二つの整数を引数にもち、その大きい方を戻り値とする max 二つの整数を引数にもち、その小さい方を戻り値とする min した自分が実行したプログラムです。ここまでしかわからないので簡単にお願いします class Calc { int wa; int sa; int kake; int max; int min; int num; int num1; int getWa() { System.out.println("和を調べました"); return num+num1; } int getSa() { System.out.println("差を調べました"); return sa; } int getKake() { System.out.println("積を調べました"); return kake; } int geMax() { System.out.println("大きいほうを調べました"); return max; } int getMin() { System.out.println("小さいほうを調べました"); return min; } void setwasakakemaxmin(int w,int s ,int k,int ma,int mi) { wa=w; sa=s; kake =k; max=ma; min=mi; System.out.println("和を"+wa+"差を"+sa+"積を"+kake+"大きいほうを"+max+"小さいほうを"+min+"にしました"); } } class Sample3 { public static void main(String[] args)throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); Calc car1=new Calc(); String str=br.readLine(); int num = Integer.parseInt(str); String str1=br.readLine(); int num1 = Integer.parseInt(str1); int wa=num+num1; int wa =car1.getWa(); Calc car1 =new Calc(); car1.setWaSaKakeMaxMin(1,2); int wa =car1.getWa(); int sa =car1.getSa(); int kake=car1.getKake(); int max =car1.getMax(); int min=car1.getMin(); System.out.println("Birthdayを調べたところ"); System.out.println("和は"+wa+"差"+sa+"積は"+kake+"大きいほうは"+max+"小さいほうは"+min+"でした"); } }

  • Javaプログラミング

    Javaプログラミングで分からない課題が出たので、教えてもらえませんか? 実行結果 1つ目の整数を入力してください。 23 2つ目の整数を入力してください。 12 足し算の結果:35 引き算の結果:11 プログラムの大枠はこのようになるのですが public class 〇〇 { public static void main(String[] args) { System.out.println("1つ目の整数を入力してください。"); } public static int add(int a,int b) { return (a + b); public static int sub(int a,int b) { } }

    • ベストアンサー
    • Java
印刷するとフリーズする
このQ&Aのポイント
  • 印刷するとフリーズして応答しいなくなります。
  • V.26です。
  • 御社のアプリはいつも肝心な時に動かないようです。
回答を見る