View Code of Problem 20

#include "stdio.h"
#include "math.h"
#include "string.h"

void main()
{
	int two(int a);
	int max(int a);
	int flag;
	int n;
	for(;scanf("%d",&n)!=EOF;)
	{	
		flag=2;
		for(;n>0;)
		{
			//printf("00\n");
			if(two(n)==1&&flag%2==0)
			{
				printf("Yes\n");
				break;
			}

			if(two(n)==1&&flag%2==1)
			{
				printf("No\n");
				break;
			}
			//printf("%d\n",max(n));
			if(two(n)==0)
			{
				n=n-2;			
				flag++;
			}
		}
	}
}

int two(int a)					//2的次幂?
{
	int i;
	int p=1;
	for(i=0;p<=a;i++)
	{
		if(p==a)
			return 1;
		p=p*2;
	}
	return 0;	
}

int max(int a)					//最大次幂
{
	int i;
	int p=1;
	for(i=0;;i++)
	{
		if(p>a)
			break;
		p=p*2;
	}	
	return p/2;
}

Double click to view unformatted code.


Back to problem 20