Blue Bridge Cup 시험 문제 이전 시험 문제는 사탕으로 나뉩니다.

 캔디 나누기

자원 제한

시간 제한 : 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