第7回の課題の解説

  1. 3 か 7 で割れる数の個数
    整数 n を入力する (n は1以上), 1以上, n以下の整数のうち, 3 か 7 で割れる数の個数を もとめよ.
    #include <stdio.h> int main(); int main(){ int n; char line[256]; int count; int x; gets(line); n = atoi(line); count = 0; for(x=1; x<=n; x++){ if(((x % 7) == 0) || ((x % 3) == 0)){ count = count + 1; } } printf("%d\n", count); return(0); }
    注意点:

  2. データの最小値
    いくつかの整数データを読み込み, そのなかで最小の値を出力するプログラムを作る. 入力は最初の行にデータの個数 n (n は1以上), その次から一行にひとつずつ, n個のデータが与えられる. (データはすべて0以上, 100000000未満とする.) 出力はこのn個のデータのうち, 最小のものを出力する.
    ヒント: 最小値を求めるには, 前に述べた「回数を求める」と 似た方法を使う. まず, 「暫定最小値」を憶えておく変数をひとつ用意し, 次々のデータをその変数と比較して, 新記録があったら その変数の値を更新すればよい. さて, あとはその「暫定最小値」の変数の初期値をどうするか, だ…
    #include <stdio.h> int main(); int main(){ int n; char line[256]; int min; int x; int i; min = 100000000; gets(line); n = atoi(line); for(i=0; i<n; i++){ gets(line); x = atoi(line); if(x < min){ min = x; } } printf("%d\n", min); return(0); }
    注意点:

  3. ピタゴラス
    整数 z を入力する (z は 1以上). z を斜辺とし, 残りの二辺を x, y とする直角三角形で, x, y が整数のものをすべて列挙したい. つまり, (x*x + y*y) が z*z に等しくなる正の整数 x, y の組をすべてもとめる. 出力は一行に一組ずつ, x と y を空白一文字をはさんで出力する. 出力の順は, x の小さいほうから昇順にならべる. (今回は, 平方根などは使わずに解く.)
    #include <stdio.h> int main(); int main(){ char line[256]; int x; int y; int z; gets(line); z = atoi(line); for(x=1; x<z; x++){ for(y=1; y<z; y++){ if((x*x + y*y) == z*z){ printf("%d %d\n", x, y); } } } return(0); }
    注意点: