cf#Wunder Fund Round 2016 -A - Slime Combining-简单数学

。。。给你n个size=1的笑脸。每相邻2个笑脸可以合成一个大size的笑脸

if (n>= (1<<i))   //表示能分出2^i个size=1的脸,即得到2^(i-1)个size为2的笑脸,以此类推 则答案会有一个size=i+1的笑脸。。很好推

http://codeforces.com/contest/618/problem/A

#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include<stack>
using namespace std;  
const double pi=acos(-1.0);
const double eps=1e-6; 
const int inf=2147483647;

int main()
{
	int i,j;
	int ans[1005];
	int n;
	int ok=0;
	cin>>n;
	for (i=18;i>=0;i--)
	{
		if (n>=(1<<i))
		{
			n-=(1<<i);
			ans[++ok]=i+1;
		}
	}
	for (i=1;i<=ok;i++)
	{
		if (i!=1) printf(" ");
		printf("%d",ans[i]);
	}
	printf("\n");

	
	
	
	
	
	return 0;
}


你可能感兴趣的:(cf#Wunder Fund Round 2016 -A - Slime Combining-简单数学)