LoginSignup
0
0

More than 1 year has passed since last update.

C言語でバブルソートの昇順ができた件

Posted at

注意

・AtCoderの A - Task Scheduling Problem のネタバレあり。
・読みにくいから頭の中が整理出来次第更新していく。

ACしたコード

#include <stdio.h>
int	main(void)
{
	int a123[4];

	for (int i = 0; i < 3; i++)
	{
		scanf("%d",&a123[i]);
		// printf("%d ",a123[i]);
	}
	// printf("\n");

	//ここから昇順ソート
	int i;
	int j;
	int tmp = 0;
	for (i = 0; i < 3; i++)
	{
		for (j = i + 1; j < 3; j++)
		{
			if (a123[i] > a123[j])
			{
				tmp = a123[i];
				a123[i] = a123[j];
				a123[j] = tmp;
			}
		}
	}
	//	並べ替え結果の表示
	for ( i= 0 ; i < 3; i++)
	{
		// printf("a123[i]=%d ", a123[i]);
	}
	// printf("\n");
	int sum = 0;
	for (int i = 0; i < 2; i++)
	{
		sum += a123[i + 1] - a123[i];
		// printf("sum=%d\n", sum);
	}
	printf("%d\n", sum);
	return (0);
}

実行結果
入力例1:
1_6_3
出力結果1:
5
期待する出力1:
5

入力例2:
11_5_5
出力結果2:
6
期待する出力2:
6

入力例3:
100_100_100
出力結果3:
0
期待する出力2:
0

方針(仮)

[1] int型でa1,a2,a3を標準入力から受け取る。
[2] int型で受け取った値を配列、a123[4]に代入する。
※変数a1の値をa123[4]に代入できたが、変数a2の値を代入した時に、a1の値がa2の値に上書きされている事に気づき、[3]以降に着手できない。

↓↓↓↓↓↓ [1],[2] を変更 ↓↓↓↓↓↓
[1] 標準入力から受け取る変数をa123[4];という配列で受け取る。
[2] a123[4];という配列をバブルソートの昇順にする。
[3] for文でiを1〜3回まで回して、以下のイメージで引き算をする。

a123[1] - a123[0]
a123[2] - a123[1]
※for文で i の範囲を1〜3回にすると(入力例1の場合)

配列a123[i]の値のa123[0]が 0 、a123[1]が 1 、a123[2]が 6 の値が出力されるので[4]以降に着手できない。

↓↓↓↓↓↓ [3] を変更 ↓↓↓↓↓↓
[3] for文の i の範囲は、0〜2回までにして上記のイメージで引き算をする。
[4] int sum = 0;の変数に引き算した結果を代入する。
※代入すると値が上書きされるので以下のイメージの結果をint sum = 0;に足し算していく。
a123[1] - a123[0]
a123[2] - a123[1]

↓↓↓↓↓↓ [4] を変更 ↓↓↓↓↓↓
[4] int sum = 0;の変数にa123の配列の値の引き算した結果を足し算する。
[5] for文を抜けてint sumの変数に引き算の結果を出力する。

ACする方針まとめ

[1] 標準入力から受け取る変数をa123[4];という配列で受け取る。
[2] a123[4];という配列をバブルソートの昇順にする。
[3] for文の i の範囲は、0〜2回までにする。
[4] int sum = 0;の変数にa123の配列の値の引き算した結果を足し算する。
[5] for文を抜けてint sumの変数に引き算の結果を出力する。

メモ

// 最後のループ
for(int i = 0; i < 3; i++){
    sum += a123[i - 1] a123[i];
}
//にすると、a123[1] - a123[i]が計算されてマイナスの値になる可能性があるので
for(int i = 0; i < 2; i++){
    sum += a123[2] - a123[i]
}
//の計算で終わるようにループで引き算する回数を1回分減らす。

・バブルソートを使う事が増えたからバブルソートの関数を昇順と降順バージョンを作ってスニペットにしたい。

0
0
5

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