ページ 1 / 1
Forの中のforとそのforの中の意味についての質問です。
Posted: 2021年4月24日(土) 19:19
by 03life
https://atcoder.jp/contests/abc194/tasks/abc194_b
この問題で次のような回答をみつけました。
コード:
#include<stdio.h>
void main(void){
int n,a[1000],b[1000],A_MIN=100000,B_MIN=100000,p=100000,x;
scanf("%d",&n);
for (int i = 0; i < n; i++)
{
scanf("%d %d",&a[i],&b[i]);
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (i==j)
{
x=a[i]+b[j];
}else if (a[i]>b[j])
{
x=a[i];
}else
{
x=b[j];
}
if (p>x)
{
p=x;
}
}
}
printf("%d\n",p);
}
この回答の以下の部分の意味が理解できないので解説をお願いしたく質問しました。
コード:
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (i==j)
{
x=a[i]+b[j];
}else if (a[i]>b[j])
{
x=a[i];
}else
{
x=b[j];
}
if (p>x)
{
p=x;
}
}
}
printf("%d\n",p);
Re: Forの中のforとそのforの中の意味についての質問です。
Posted: 2021年4月24日(土) 23:37
by box
この回答の以下の部分の意味が理解できないので解説をお願いしたく質問しました。
コード:
for (int i = 0; i < n; i++) // iを0~n-1までn回くり返す
{
for (int j = 0; j < n; j++) // jを0~n-1までn回くり返す(つまりこの2重ループはn*n回まわる)
{
if (i==j) // iとjが等しければ
{
x=a[i]+b[j]; // xにa[i]とb[j]の和を代入する
}else if (a[i]>b[j]) // iとJが等しくなく、a[i]がb[j]より大きければ
{
x=a[i]; // xにa[i]を代入する
}else // iとjが等しくなく、a[i]がb[j]以下ならば
{
x=b[j]; // xにb[j]を代入する
}
if (p>x) // pがxよりも大きければ
{
p=x; // pにxを代入する
}
}
}
printf("%d\n",p); // pの値を出力する
Re: Forの中のforとそのforの中の意味についての質問です。
Posted: 2021年4月24日(土) 23:39
by box
nに3あたりの小さめの数を設定して、
自分がコンピューターになったつもりで
コードを1行ずつ追いかけてみては?
Re: Forの中のforとそのforの中の意味についての質問です。
Posted: 2021年4月25日(日) 22:42
by 03life
box さんが書きました: ↑3年前
nに3あたりの小さめの数を設定して、
自分がコンピューターになったつもりで
コードを1行ずつ追いかけてみては?
ありがとうございます。自分でもやってみたのですが、それでもまったくわからず質問させていただきました。
Re: Forの中のforとそのforの中の意味についての質問です。
Posted: 2021年4月25日(日) 23:30
by box
その上のコードに書いた
当方からのコメントを
追いかけてみましたか?