###前提・実現したいこと
現在C#を勉強するにあたり、「一週間で身につくC#言語」サイトを参照しながら勉強しております。
一通り基礎編の練習問題を解き終えたので、チャレンジ問題に挑戦しているところです。
現在Prob8-2において、重複判定をどのように実装すればよいかわからない状態です。
Prob8-1
a,b,cを、いずれも1以上100以下の整数とするとき、aa+bb=c*cを満たす、全てのa,b,cの組み合わせ全てと、その数を求め、画面に表示しなさい。ただし、a,bの数値の組み合わせが同じものも別のものとしてもかまわない。具体的には、a=3,b=4,c=5と、a=4,b=3,c=5は別の組み合わせとする。
Prob8-2←今ここを解いている
prob8-1.のデータから、重複を取り除いた組み合わせと、その数を表示するプログラムを作りなさい。具体的には、a=3,b=4,c=5と、a=4,b=3,c=5は同じものとみなす。
###発生している問題・エラーメッセージ
重複する場合は表示させないという実装において、どのように実装すればよいのかわからない。
###該当のソースコード
C#
1// prob8-1の解答 2using System; 3using System.Collections.Generic; 4using System.Linq; 5using System.Text; 6using System.Threading.Tasks; 7 8namespace Problem8_1 9{ 10 class Program 11 { 12 static void Main(string[] args) 13 { 14 int a, b, c; 15 16 for(a = 1; a <= 100; a++) 17 { 18 for(b = 1; b <= 100; b++) 19 { 20 for(c = 1; c <= 100; c++) 21 { 22 int x = a * a; 23 int y = b * b; 24 int z = c * c; 25 26 if(x + y == z) 27 { 28 Console.WriteLine("a = {0} b = {1} c = {2}", a, b, c); 29 } 30 } 31 } 32 } 33 } 34 } 35}
C#
1// prob8-2の解答 2using System; 3using System.Collections.Generic; 4using System.Linq; 5using System.Text; 6using System.Threading.Tasks; 7 8namespace Problem8_2 9{ 10 class Program 11 { 12 static void Main(string[] args) 13 { 14 int a, b, c; 15 int m = 0; 16 int[,] ary = new int[1000, 3]; 17 18 for(a = 1; a <= 100; a++) 19 { 20 for(b = 1; b <= 100; b++) 21 { 22 for(c = 1; c <= 100; c++) 23 { 24 int x = a * a; 25 int y = b * b; 26 int z = c * c; 27 28 if(x + y == z) 29 { 30 ary[m, 0] = a; 31 ary[m, 1] = b; 32 ary[m, 2] = c; 33 34 m++; 35 } 36 } 37 } 38 } 39 40 //Console.WriteLine("{0}", ary.Length); 41 42 for(int i = 0; i < ary.GetLength(0); i++) 43 { 44 if(ary[i, 0] != 0 && ary[i, 1] != 0 && ary[i, 2] != 0) 45 { 46 Console.WriteLine("a = {0} b = {1} c = {2}", ary[i, 0], ary[i, 1], ary[i, 2]); 47 } 48 } 49 } 50 } 51}
###試したこと
①Prob8-1を最初利用しようとしたが、重複を判定する場合は一度該当する数値をデータとして保持しないと無理ではないかと思い、二次元配列に該当数字をpush
②該当数字を配列に格納したが、数値0,0,0が出てきてしまうのでいったんif文にて0,0,0を非表示←この部分もなんとかしたい。
③重複判定を行おうとしたが、どのようにすれば良いのか手詰まりとなってしまっている状態
###補足情報(言語/FW/ツール等のバージョンなど)
現在勉強中のため、お手数をおかけしてしまい申し訳ございませんが、わかりやすいアドバイスを頂けると幸いでございます。
またもし別の方法や簡単な方法等ございましたらそちらに関するアドバイスもありがたいです。
よろしくお願いいたします。
###追記
回答より頂いたアドバイスを参照に作成
C#
1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Text; 5using System.Threading.Tasks; 6 7namespace Problem8_2 8{ 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 int a, b, c; 14 int m = 0; 15 int[,] ary = new int[1000, 3]; 16 17 for(a = 1; a <= 100; a++) 18 { 19 for(b = 1; b <= 100; b++) 20 { 21 for(c = 1; c <= 100; c++) 22 { 23 int x = a * a; 24 int y = b * b; 25 int z = c * c; 26 27 if(x + y == z) 28 { 29 // prob8-1より本制御文追加 30 if(a <= b) 31 { 32 Console.WriteLine("a = {0} b = {1} c = {2}", a, b, c); 33 } 34 } 35 } 36 } 37 } 38 39 //Console.WriteLine("{0}", ary.Length); 40 41 //for(int i = 0; i < ary.GetLength(0); i++) 42 //{ 43 // if(ary[i, 0] != 0 && ary[i, 1] != 0 && ary[i, 2] != 0) 44 // { 45 // Console.WriteLine("a = {0} b = {1} c = {2}", ary[i, 0], ary[i, 1], ary[i, 2]); 46 // } 47 //} 48 } 49 } 50}
ただなんとなく腑に落ちない部分があるので、頂いたアドバイスを参照にもう少し作ってみる

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/27 06:50