uva 725 Division 简单枚举

本文介绍了一个利用枚举法解决特定排列组合问题的方法,通过枚举五位数并计算其乘以某个系数后的结果,来寻找符合特定条件的十位数排列,确保每个数字从0到9恰好出现一次。程序使用C++编写,展示了如何检查数字是否满足条件的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

点击打开链接

//求满足abcde/fghij=N的个数 a~j为0~9的一个排列 
//枚举abcde算出fghij 在判断所有数字是否不同即可 

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
typedef long long ll;
const int N=1e2+20;
//求满足abcde/fghij=N的个数 a~j为0~9的一个排列 
//枚举abcde算出fghij 在判断所有数字是否不同即可 
int n,cnt;
bool check(ll a,ll b)
{
	int used[N],vis[N];
	memset(used,0,sizeof(used));
	memset(vis,0,sizeof(vis));
	int num=0;
	int f=a,s=b;
	if(f<1e4)//
	used[0]=1;
	while(a)
	{
		int r=a%10;
		if(used[r])
		return false;
		used[r]=1;
		a/=10;

	}
	while(b)
	{
		int r=b%10;
		if(used[r]||vis[r])
		return false;
		
		vis[r]=1;
		b/=10; 
	}
	for(int i=0;i<10;i++)
	{
		if(used[i]||vis[i])
		num++;	
	}	
	return num==10;
} 
int main()
{ 
	int t=0;
	while(cin>>n&&n)
	{
		if(t++)
		printf("\n");
		bool flag=false;
		for(int i=1234;i<100000;i++)
		{
			if(check(i,i*n))
			{
				//%05d不足5位,最左添加0 
				printf("%05d / %05d = %d\n",i*n,i,n);
				flag=true; 
			}
		}
		if(!flag)
		printf("There are no solutions for %d.\n",n);
		
	
		
	}
	return 0;
} 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值