C言語による日の出と日の入りです。
太陽の高さと半径から、時間帯を判別するプログラムです。
Aizu Online Judge in C #Volume3 - 0336 : C言語による日の出と日の入り
https://onlinejudge.u-aizu.ac.jp/problems/0336
・問題
太陽が現れることを「日の出」、隠れることを「日の入り」と呼びますが、その厳密な時刻は太陽が地平線に対してどのような位置にある時でしょうか。
下の図のように、太陽を円、地平線を直線で表すことにします。
このとき、太陽の「日の出」「日の入り」の時刻は、太陽を表す円の上端が地平線を表す直線と一致する瞬間とされています。
日の出の時刻を過ぎ、円の上端が直線より上にある時間帯が昼間、円が直線の下へ完全に隠れている時間帯が夜間となります。
ある時刻の地平線から太陽の中心までの高さと、太陽の半径を入力とし、その時刻が「昼間」か、「日の出または日の入り」か、「夜間」かを出力するプログラムを作成せよ。
・入力される値
入力は以下の形式で与えられる。
H R
入力は1行からなり、ある時刻の地平線から太陽の中心までの高さを表す整数 H (-1000 ≤ H ≤ 1000) と半径を表す整数 R (1 ≤ R ≤ 1000) が与えられる。
ただし、H は太陽の中心が地平線上にあるときを 0 として、それより上にあるときは正、下にあるときは負とする。
・期待する出力
昼間のとき「1」、日の出または日の入りのとき「0」、夜間のとき「-1」を1行に出力する。
僕が作成、提出したコードは、以下のとおりです。
/* Problem Set from Volume3 0336 : Sunrise and Sunset http://judge.u-aizu.ac.jp/ C言語による日の出と日の入り https://neguse-atama.hatenablog.com */ #include<stdio.h> int main(void){ int H,R; scanf("%d %d",&H,&R); if(H+R<0){ printf("-1\n"); }else if(H+R>0){ printf("1\n"); }else{ printf("0\n"); } return 0; }
設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/
Problem Set from Volume3 0336 : Sunrise and Sunset