ブルーブリッジカップテストの質問以前のテストの質問はキャンディーに分かれています

 キャンディーを分割する

リソース制限

制限時間:1.0秒メモリ制限:256.0MB

問題の説明

  輪になって座っている子供はn人います。先生は各子供にランダムに偶数のキャンディーを与え、次に次のゲームをしました:

  各子供は彼の左側の子供に彼のキャンディーを半分に分けました。

  砂糖を割った後、キャンディーの数が奇数の子供には、先生から偶数が与えられます。

  すべての子供が同じ数のキャンディーを持つまで、このゲームを繰り返します。

  あなたの仕事は、教師が既知の最初のキャンディーの下で再発行する必要があるキャンディーの数を予測することです。

入力フォーマット

  プログラムは最初に、子の数を表す整数N(2 <N <100)を読み取ります。
  スペースで区切られたN個の偶数の行が続きます(各偶数は1000以下、2以上)

出力フォーマット

  プログラムは、教師が再発行する必要のあるキャンディーの数を示す整数を出力する必要があります。

サンプル入力

3
2 2 4

サンプル出力

4

アイデアは非常に明確です。理解できない場合は、コード分析に従ってください(* ^▽^ *)

実装コード:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n;
	int a[105];
	int i,j;
	
	cin>>n;
	for(i=1;i<=n;i++)
	cin>>a[i];
	
	//完成输入
	int t;
	int f;
	int sum=0;//记录给出了多少糖果 
	
	while(1)
	{
		f=0;
		t=a[1];
		
		for(i=2;i<=n;i++)//结束的条件 
		{
			if(a[i]!=t)
			{
				f=1;
				break;
			}
		}
		
		if(f==0)
		{
			printf("%d",sum);
				return 0;
		}
		int kk;
		
		kk=a[1];//记录一下a【1】原本的值是多少 
		
		for(i=2;i<=n;i++)
		{
			a[i-1]+=a[i]/2; 
			a[i]=a[i]/2;
		}
		
		a[n]+=kk/2;
		a[1]-=kk/2;
		
		//for(i=1;i<=n;i++)
		//printf("%d ",a[i]);
		
		//分完糖果老师来了
		
		for(i=1;i<=n;i++)
		{
			if(a[i]%2!=0)//如果是奇数
			{
				a[i]++;
				sum++;
			} 
		}
	
	} 
	return 0;
	
}

 

おすすめ

転載: blog.csdn.net/with_wine/article/details/115284709