Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

用STL 0ms

Posted by 0409 at 2009-03-24 16:44:17 on Problem 2453
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <algorithm>
#include <functional>
using namespace std;

#define INT_LEN 32

struct greate:public binary_function<char,char,bool>{
	bool operator() (const char& c1,const char& c2) const { return c2<c1; }
};

int main()
{
	int I, J, len,
		_i, pow2;
	char a[INT_LEN], b[INT_LEN];

	while (scanf("%d", &I) && I != 0)
	{

		//算法:先计算I的二进制字符串,然后利用althorithm中next_perputation函数产生下一个排序字符串,后转化为整数输出

		//首先排除当前排序最大的情况
		J = 0;
        _itoa(I, a, 2);
		strcpy(b, a);
		len = strlen(a);
		sort(b, b+len, greate());

		if (strcmp(b,a) == 0)
		{
			//增加一位,然后将最高位置1:
			a[len] = '0';
			a[len + 1] = '\0';
			if (a[0] != '1')
			{
				a[0] = '1';
				for (_i=1; _i<len; _i+=1)
					if (a[_i] == '1')
					{
						a[_i] = '0';
						break;
					}
			}
			sort(a+1, a + len+1);
		}
		else
			next_permutation(a, a+len);
	    
		_i=strlen(a)-1; pow2 = 1;
		while (_i >= 0)
		{
			J += pow2 * (a[_i] - '0');
			_i -= 1;
			pow2 *= 2;
		}

		printf("%d\n", J);
	}

	return 0;
}



Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator