🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

5回答

988閲覧

この問題がわかりません教えてください

Mahimahi

総合スコア2

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/11/29 21:02

1≦a≦100および1≦b≦100をそれぞれ満たす2つの自然数a,bについて、a²+b²=c²を満たす自然数a,b,cの組み合わせを列挙するプログラムを作成しなさい。なお、列挙される組み合わせの順番については、以下の通りでなくてもよい。(注意:以下の実行例では、3²を表すのに3^2としているが、これは表示を行う際の便宣上のものであり、C言語ではべき乗の演算子は存在しない事に注意すること。)
[実行例]
3^2+4^2=5^2
4^2+3^2=5^2
5^2+12^2=13^2
・・・中略・・・
100^2+75^2=125^2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2020/11/29 22:37

どこからわからないんでしょう? 「自然数」はわかりますか?
episteme

2020/11/29 22:59

「100x100(=1万通り)の総当たり」のやりかたがわかんないのかな?
guest

回答5

0

参考情報

  • ピタゴラス数

http://www.mathlion.jp/article/ar135.html

  • 1万以下のピタゴラス数一覧表

https://www.hyogo-c.ed.jp/~meihoku-hs/club/astronomy-py.html

  • ピタゴラス数の求め方とその証明

https://mathtrain.jp/pythagoras

  • ピタゴラス数列挙プログラム

http://www008.upp.so-net.ne.jp/kinoko/rimokon/11ch/pythagoras.htm

上の参考情報の一番目のページに記載されている方法で
原始ピタゴラス数とその定数倍の数を列挙していくようなプログラム
を書いてみました。
(c, c++ でなく、ruby で書いてますが)

r.rb

ruby

1# frozen_string_literal: true 2 3ans = [] 4(1..100).each do |m| 5 (1...m).each do |n| 6 next if m.gcd(n) != 1 # m, n は互いに素 7 next if (m - n).even? # m − n が奇数 8 9 a = m * m - n * n 10 b = 2 * m * n 11 next if a > 100 || b > 100 12 13 c = m * m + n * n 14 big = [a, b].max 15 (1..(100 + big - 1) / big).each do |t| 16 next if a * t > 100 || b * t > 100 17 18 at = a * t 19 bt = b * t 20 ct = c * t 21 ans += [[at, bt, ct], [bt, at, ct]] 22 end 23 end 24end 25 26p "#{ans.size} 通りあります。" 27ans.each do |v| 28 puts("#{v[0]}^2 + #{v[1]}^2 = #{v[2]}^2") 29end

実行例
イメージ説明

投稿2020/12/01 12:08

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

この程度なら、二分探索でなく線形探索で十分でしょう。

C

1#include <stdio.h> 2 3int main(void) 4{ 5 int s[150], a, b, c, cc; 6 for (c = 0; c < 150; c++) s[c] = c * c; 7 for (a = 1; a <= 100; a++) 8 for (b = 1; b <= 100; b++) 9 for (cc = a*a + b*b, c = 1; s[c] <= cc; c++) 10 if (s[c] == cc) printf("%4d%4d%4d\n", a, b, c); 11}

投稿2020/11/30 13:39

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

一番外側のループを c についてのループとしたが,いまいち感.

C++

1inline void Show( int a, int b, int c ) 2{ std::cout << a << "^2 + " << b << "^2 = " << c << "^2\n"; } 3 4int main(void) 5{ 6 const unsigned int N = 100; //※a,bの最大値 7 unsigned int Sq[N+1]; 8 for( unsigned int i=1; i<=N; ++i ){ Sq[i] = i*i; } 9 10 unsigned int c=2; 11 while( true ) 12 { 13 const unsigned int SqC = ( c<=N ? Sq[c] : c*c ); //※不格好だなぁ 14 if( SqC > 2*N*N )break; 15 16 for( unsigned int a=1; a<=std::min(c-1,N); ++a ) 17 { 18 const unsigned int SqRest = SqC - Sq[a]; 19 20 unsigned int l=1, h=a; 21 while( l<=h ) 22 { 23 unsigned int b = (l+h)/2; 24 if( Sq[b] == SqRest ){ Show( a,b,c ); Show( b,a,c ); break; } 25 26 if( Sq[b] < SqRest ){ l = b+1; } 27 else { h = b-1; } 28 } 29 } 30 31 ++c; 32 } 33 34 return 0; 35}

投稿2020/11/30 02:43

編集2020/11/30 10:23
fana

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2020/11/30 10:07

これでもかというくらい間違っていたので修正.(はずかしい)
fana

2020/11/30 10:24

くっそ,余計な物入れ込んだ.修正.(さらにはずかしい)
apo

2020/12/01 02:07

せっかく回答してくれているのに低評価を押す奴の気が知れない。
fana

2020/12/01 02:17

まぁ,盛大に間違っていたためだろうとは思いますが, それが理由ならばその旨を明記して欲しいところではあります. そして,願わくば,修正結果をチェックして「それならいい」とか「まだダメ」とか言って欲しい(わがまま?).
guest

0

出力のフォーマットは自分でいじってください
これで目的の値は得られるはずですよ!

c++

1#include <bits/stdc++.h> 2using namespace std; 3 4int main() { 5 for(int a=1; a<=100; a++) { 6 for(int b=1; b<=100; b++) { 7 int x = pow(a, 2) + pow(b, 2); 8 int y = sqrt(x); 9 if(x == y * y) { 10 cout << "a:" << a << " b:" << b << " c:" << y << endl; 11 } 12 } 13 } 14 return 0; 15}

投稿2020/11/30 00:16

encho

総合スコア182

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

まずは、aを1から100まで繰り返すコードを書いてみましょう。
これならできませんか

投稿2020/11/29 23:52

y_waiwai

総合スコア88040

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問