캔디 나누기
자원 제한
시간 제한 : 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;
}