注意!
・以下のネタバレあり
学んだこと
・2N×(N−1)/2 の公式
・二重ループのjの値
2N×(N−1)/2 の公式
・n個の要素からr個の要素を選ぶ組み合わせの数を求める公式。
・そもそも組み合わせは同じ要素を重複しない。
A B Cの組み合わせを考える場合は、AA BB CCは同じ要素を重複しているので考慮しない。
二重ループのjの値の実験したコード
・入力例1で実験しています。
ACしたコード
#include <stdio.h>
int main(void)
{
int n;
scanf("%d",&n);
// printf("%d\n",n);
int d[n];
for (int i = 0; i < n; i++)
{
scanf("%d",&d[i]);
// printf("%d ",d[i]);
}
int ans = 0;
for (int i = 0; i < n; i++){
// j = i + 1と定義することでjの値が常にi + 1になるので同じ整数同士を掛け算しなくなる。
for (int j = i + 1; j < n; j++){
// printf("%d ",d[j]);
ans += d[i] * d[j];
printf("i = %d,j = %d\n", d[i],d[j]);
printf("ans = %d\n", ans);
}
}
// printf("%d\n", ans);
return (0);
}
実験したコード
AA BB CCを同じ要素を重複しているので考慮したい時に使う。
(まだそのような問題は見たことがない)
#include <stdio.h>
int main(void)
{
int n;
scanf("%d",&n);
// printf("%d\n",n);
int d[n];
for (int i = 0; i < n; i++)
{
scanf("%d",&d[i]);
// printf("%d ",d[i]);
}
int ans = 0;
for (int i = 0; i < n; i++){
// j = 1にすると同じ整数同士を掛け算するので2N×(N−1)/2の公式の条件に合わなくなる。
for (int j = 1; j < n; j++){
// printf("%d ",d[j]);
ans += d[i] * d[j];
printf("i = %d,j = %d\n", d[i],d[j]);
printf("ans = %d\n", ans);
}
}
// printf("%d\n", ans);
return (0);
}
ターミナル