C言語の古典的な例の説明(出力ダイヤモンド、ドリンクソーダ)

目次

1.ひし形を出力する

2. 炭酸飲料の問題

方法 1: ステップバイステップ 

 方法 2: 式を直接適用する


 

1.ひし形を出力する

出力は、以下の画像のようなひし形になります。 

 

分析を通じて: 1. まず出力を上部と下部に分割します 

                  2. 出力前にスペースを出力する

                  3. アウトプットする法則を見つける

行の前半が作成でき、下半分が行-1 の行であることがわかります。

スペースを見つける法則: 行が 7 の場合、1 行目には 6 個、2 行目には 5 個のスペースがあります...7 行目にはスペースはありません

開始点は line-1 で、終了点は 0 です。

Find * ルール: 行が 7 の場合、最初の行に 1、2 行目に 3、... 7 行目に 13 があります。

ルールは次のとおりです: 行*2-1

int main()
{
	int line = 0;
	scanf("%d", &line);
	//开始输出上半部分
	for (int i = 1; i <= line; i++)
	{
		//先输出空格
		for (int j = 1; j <= line - i; j++)
		{
			printf(" ");
		}

		for (int j = 1; j <= 2 * i-1; j++)
		{
			printf("*");
		}
		printf("\n");
	}
	return 0;
}

後半の出力を開始します。

int main()
{
	int line = 0;
	scanf("%d", &line);
	//开始输出上半部分
	for (int i = 1; i <= line; i++)
	{
		//先输出空格
		for (int j = 1; j <= line - i; j++)
		{
			printf(" ");
		}

		for (int j = 1; j <= 2 * i-1; j++)
		{
			printf("*");
		}
		printf("\n");
	}

	//开始输出下半部分
	for (int i = 1; i <= line - 1; i++)
	{
		for (int j = 1; j <= i; j++)
		{
			printf(" ");
		}

		for (int j = 1; j <= (line - i) * 2 - 1; j++)
		{
			printf("*");
		}
		printf("\n");
	}
	return 0;
}


まとめ: 各行のスペースや * の数と行数との定量的な関係を見つけることに注意する必要があります。 

2. 炭酸飲料の問題

ソーダを飲みます。ソーダ1本は1元です。空のボトル2本をソーダ1本と交換できます。n元が与えられた場合、ソーダは何本飲めますか 

方法 1: ステップバイステップ 

int main()
{
	int n = 0;
	int total = 0;
	scanf("%d", &n);//自己输入钱数
	total = n;
	int bottle = n;//一开始剩的瓶子数是钱数
	while (bottle >= 2)
	{
		total = total + bottle / 2;
		bottle = bottle / 2 + bottle % 2;
	}
	printf("%d", total);
	return 0;
}

なお、ボトル=ボトル/2+ボトル%2、n=10の場合、10本飲んだら5本に変更する。5 つのボトルをさらに 2 つのボトルと交換でき、空のボトルが 1 つ残っていると +ボトル % 2 になります。

 方法 2: 式を直接適用する

さらにいくつかのグループを試してみると、最終的に飲むボトルの総数は、お金の 2 倍から 1 を引いたものになることが簡単にわかります。

2*n-1 は直接印刷できます。 


 これが最初のトピックであり、今後も共有していきますので、疑問がある場合はいつでも質問してください。 

おすすめ

転載: blog.csdn.net/qq_74415153/article/details/132193988