こんにちは、情報系大学生のハル(Blog_IT_haru)です。
今回は、C言語でのAtCoder Beginner Contest 246(ABC246)に参加したので、自分の復習を兼ねてまとめていきたいと思います。
なお、私は灰色coderで、まださほど参加したことがありません。
超初心者ですので、備忘録的にまとめていきます。
問題
入力として、長方形の4つの頂点のうち異なる3つの頂点の座標(x1,y1),(x2,y2),(x3,y3)が与えられるので、残る1つの頂点の座標を出力する。
制約:入力は全て整数であり、(x1,y1),(x2,y2),(x3,y3)のすべてを頂点に持つ長方形がただ一つ存在し、その各辺はx軸またはy軸に平行であり、面積は0ではない。x,yの入力は、-100以上、100以下である。
問題ページ:A - Four Points
正解率
まだ公開されていないため、公開され次第載せます。
私の考え方
x1=x2のときx3が答え、x2=x3のときx1が答え、x1=x3のときx2が答えであり、yのときも同様である。
※これは、公式の考え方と同様でした。
私のソースコード
#include <stdio.h>
int main(void){
int x1,x2,x3,y1,y2,y3;
scanf("%d %d",&x1,&y1);
scanf("%d %d",&x2,&y2);
scanf("%d %d",&x3,&y3);
int ansx,ansy;
if(x1==x2){
ansx=x3;
}
else if(x1==x3){
ansx=x2;
}
else{
ansx=x1;
}
if(y1==y2){
ansy=y3;
}
else if(y1==y3){
ansy=y2;
}
else{
ansy=y1;
}
printf("%d %d\n",ansx,ansy);
}
公式の解説・考え方
私の考え方と同様でした。
↓C++のコードは以下から確認いただけます。
Editorial - AtCoder Beginner Contest 246
ユーザ解説では、C++で、排他的論理和を利用して解いていました。
Editorial - AtCoder Beginner Contest 246
必要な知識
以下の知識が必要です。
※各項目をクリックすることで、該当の部分に飛べます。
scanfで値を読み取る方法
今回は、整数なので、以下の様に読み取ります。
int a;
scanf("%d",&a);
intは、型の種類の一つで、整数を取り扱います。
簡単に言うと、大きさが大きくない整数を取り扱える型です。
int型を、scanfで読み取るときの変換指定子は、dです。
変換指定子を簡単に言うと、整数を読み取るためのものです。
scanf自体は、scanf(”書式文字列”, &変数名1, &変数名2…)というふうに使用します。
書式文字列の中に、%dなどの変換指定子を書きます。
使い方は以下のような感じです。
※上のコードと同じです。
int a; scanf("%d",&a);
if文の使い方
過去に、if文について書いていた記事がありましたので、一部引用しました。
ifという文字通り、「~なら~する」という、条件で処理を実行するか否か決めることができます。
次のように使います。
if (条件式) 処理 ;
または、
if(条件式){ 処理; }
です。
(引用元:C言語で最大値を求める - ハルの初心者プログラミング部)
ただ、私の考え方で解く場合はelse ifの知識も必要です。
以下のように使用します。
ifは最初の1つだけ、elseも最後の1つだけですが、else ifは何回でも使用することができます。
if(条件式){ /*実行すること*/ } else if(条件式){ /*実行すること*/ } else{ /*実行すること*/ }
printfの使い方
過去に、printfについて書いていた記事がありましたので、一部引用しました。
printfは、文字列を表示するための関数です。
普通は、以下のように、文字列を記述するのですが、今回は整数の計算結果を記述したいので、少し違う書き方になりましたね。
普通の文字列の場合
printf("tameshi");
整数の場合
printf("%d",sum);
このとき出てきた、%dのdが、変換指定子dです。
%d
printf内で使います。
整数を10進数で出力します。
int型に対応します。
使用例
printf("%d",10);
この場合、10と出力されます。
\n
printf内で使います。
改行を行います。
先程の変換指定子の前か後に記入します。
前に記入した場合は前が改行され、後ろに記入した場合は後ろが改行されます。
今回も、見やすく出力するために、使用しました。
printf("\n%d",sum);
こんな感じですね。
(引用元:C言語で合計値を求める - ハルの初心者プログラミング部)
おすすめな記事
ABC238~244の、A,B,C問題の解説の記事もありますので、ぜひ読んでみてください。
※A問題のみやA問題とB問題のみの場合もあります。
まとめ
いかがでしたか?
A問題はやっぱりそんなに難しくないですね。
\ほんとの初心者の方は、本で学ぶのもおすすめ!/
以下の記事でおすすめ本紹介しています!
この記事がいいな、と思ってくれたら、SNSなどで拡散したり、
ブックマークやコメントなどしてくれると励みになります!
下の方とサイドバーにある、サポートもお待ちしています!
更に、読者になってくれたら、お返しに私も読者になります!
また、この記事の内容についてなにかありましたら、
お問い合わせ、コメント、TwitterのDMなどによろしくお願いします。
それでは。