アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下の問題がわからなくて困っております。
c言語での問題です。

2つの正の実数x,yを入力した時、
原点、(x,0)、(x,y)を頂点とする三角形の内部に、
x座標、y座標が共に整数となる点がいくつ含まれるかを
出力するプログラムを作成せよ。
ただし、辺の上の点も含む。

よろしくお願いします。

A 回答 (3件)

こういうことですかね…?


なにかそもそもからして間違ってたらごめんなさい。
入力するx,yは正の実数とありますが、特に入力時にチェックなどはしていません。


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {
double input_x, input_y;
char tmpstr[100];
int sx, sy;
double y;
int count = 0;

printf("x = ");
fgets(tmpstr, 100, stdin);
input_x = atof(tmpstr);

printf("y = ");
fgets(tmpstr, 100, stdin);
input_y = atof(tmpstr);

//printf("x = %f, y = %f\n", input_x, input_y);
printf("三角形: (0, 0) (%f, 0) (%f, %f)\n", input_x, input_x, input_y);

for (sx = 0; sx <= input_x; sx++) {
y = input_y / input_x * sx;

for (sy = 0 ; sy <= input_y ; sy++) {
printf("sx = %d, sy = %d ", sx, sy);
if (sy <= y) {
printf("三角形の内部");
count++;
}
printf("\n");
}
}
printf("三角形内部の整数点: %d\n", count);
return 0;
}
    • good
    • 0

初歩的のものではありますが細かな神経が必要な問題です。



>ただし、辺の上の点も含む。

この処理を間違えないように。グラフィックのコマンドもも組み込んで絵の上で確認しながらやらなければ必ず間違えるでしょう。プロット点を一個づつ数えて確認するのが確実です。
恥ずかしながら私はCは知らないのでBASICで書きます。
XP=X:YP=Y (x,yを入力します。)
S=0 : IX=int(XP)
for I=0 to IX
IY=int(YP*I/XP)
S=S+iy
next I
print S
end

グラフィックはx,y座標軸を書いて⊿(0,0)(x,0)(x,y)を書いて
点(I,J)(J=0,IY)をプロットします。

この数とSが一致すれば正解です。
    • good
    • 0

効率的な数え方はあるかもしれませんが、


とりえあずはx軸の値を0からxまで、y軸の値を0からyまで変化させて、
ひとつひとつ調べて行けばいいかと思います。

それと原点より左側あるいは下側の、負の座標も考慮する必要があるでしょう。
ただxとyが正でも負でも答えは同じでしょうから、入力値を
正の値に置き換えてから数えてもいいかもしれませんね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!