简单枚举的除法

今天看到一个简单枚举的题目

除法
输入正整数n,按从小到大的顺序输出所有形如abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列,2<=n<=79. 样例输入: 62 样例输出: 79546/01238=62 94736/01528=62

我是这么搞的

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int n;

void enumerate(char dividend[], int div_index)
{
	if (div_index == 5)
	{
		int divide = atoi(dividend);
		int product = divide * n;
		if (product > 10000 && product <99999)
		{
			char product_str[6];
			sprintf(product_str, "%d", product);
			int map[10] = {0};
			int conflict = 0;
			for (int i=0; i<5; i++)
			{
				if (map[product_str[i]-'0'] == 0)
				{
					map[product_str[i]-'0']++;
				}
				else
				{
					conflict = 1;
					break;
				}
			}
			for (int i=0; i<5; i++)
			{
				if (map[dividend[i]-'0'] == 0)
				{
					map[dividend[i]-'0']++;
				}
				else
				{
					conflict = 1;
					break;
				}
			}
			if ( ! conflict)
			{
				printf("%s / %s = %dn", product_str, dividend, n);
			}
		}
		return;
	}
	for (char ch='0'; ch<='9'; ch++)
	{
		int occupy = 0;
		for (int i=0; i<div_index; i++)
		{
			if (dividend[i] == ch)
			{
				occupy = 1;
				break;
			}
		}
		if ( ! occupy)
		{
			dividend[div_index] = ch;
			enumerate(dividend, div_index+1);
		}
	}
}

int main()
{
	while (scanf("%d", &n) == 1)
	{
		char dividend[6] = {0};
		enumerate(dividend, 0);
	}
	return 0;
}

输入输出

62
79546 / 01283 = 62
94736 / 01528 = 62
7
16758 / 02394 = 7
18459 / 02637 = 7
31689 / 04527 = 7
36918 / 05274 = 7
37926 / 05418 = 7
41832 / 05976 = 7
53298 / 07614 = 7
98532 / 14076 = 7

不过这明显太长了,继续写短。。

参考这里,http://blog.csdn.net/xujinsmil…,得到如下代码

#include <stdio.h>

int main()
{
	int n;
	while (scanf("%d", &n) != EOF)
	{
		for (int i=1234; i<=98765; i++)
		{
			if (n*i <= 98765)
			{
				int map[10] = {0};
				int ii=i, ni=n*i;
				for (int j=0; j<5; j++, ii/=10, ni/=10)
				{
					map[ii%10]++;
					map[ni%10]++;
				}
				for (int j=0; j<10; j++)
				{
					if (map[j] != 1)
					{
						break;
					}
					if (j == 9)
					{
						if (i < 10000)
						{
							printf("%d / 0%d = %dn", n*i, i, n);
						}
						else
						{
							printf("%d / %d = %dn", n*i, i, n);
						}
					}
				}
			}
		}
	}
	return 0;
}

输入输出

62
79546 / 01283 = 62
94736 / 01528 = 62
7
16758 / 02394 = 7
18459 / 02637 = 7
31689 / 04527 = 7
36918 / 05274 = 7
37926 / 05418 = 7
41832 / 05976 = 7
53298 / 07614 = 7
98532 / 14076 = 7

Leave a Reply

Your email address will not be published. Required fields are marked *