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

哈尔滨现场赛 1006 问题

Posted by ycc1989918 at 2008-10-26 22:12:40
哈尔滨现场赛的一个题目
Simple Addition Expression
http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1006&cid=155

各位大牛,能不能帮我看看`````我写的代码,用穷举的方法校验, 所有数据都校验了一遍``````死活都没搜出问题```谢谢大家了

这个是我的代码
#include <stdio.h>
#include <string.h>

int pow4[11] = {1, 4, 16, 64, 256, 1024, 4096, 16384, 65536, 262144, 1048576};
int pow_10[10] = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000};
int f(int n, int len)
{
	char tmp[20];
	sprintf(tmp, "%d", n);

	if(len == 1)
	{
		if(n > 2)
			return 3;
		return n;
	}

	if(strlen(tmp) < len)
		return f(n, strlen(tmp));

	if(n / pow_10[len - 1] > 3)
		return pow4[len - 1] * 3;
	return f(n % pow_10[len - 1], len - 1) + (n / pow_10[len - 1]) * pow4[len - 2] * 3;
}

int main()
{
	int n;

	int count;
	n = 0;
	count = -1;
	//freopen("out", "w", stdout);
	while(scanf("%d", &n) != EOF)//++n <= 1000000000)
	{
		char tmp[20];
		int len;
		sprintf(tmp, "%d", n);
		len = strlen(tmp);
		/*if(count != f(n, len))
		{
			count = f(n, len);
			printf("%d %d\n", n, count);
		}*/
		printf("%d\n", f(n, len));
	}
	return 0;
}

这个是我用来穷举校验的代码
#include <stdio.h>

int main()
{
	int i, count = 0;
	freopen("out1", "w", stdout);
	for(i = 0; i <= 1000000000; i++)
	{
		int j;
		j = i;
		if(j % 10 > 2)
			continue;
		j /= 10;
		while(j)
		{
			if(j % 10 > 3)
				break;
			j /= 10;
		}
		if(!j)
		{
			count++;
			printf("%d %d\n", i + 1, count);
		}
	}
}

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