0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

C言語でn個の要素からr個の要素を選ぶ組み合わせの数を求める。

Posted at

注意!

・以下のネタバレあり

学んだこと

・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);
}

ターミナル
スクリーンショット 2023-07-10 17.53.44.png

実験したコード
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);
}

ターミナル

スクリーンショット 2023-07-10 17.55.36.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?