abcde/fghij=n

abcde/fghij=n,其中a~j为数字0~9的不同排列.n的值从2到79。统计这样的组合一共有多少个。

输入:无

思路:通过循环找到n和n*i内满足条件的数。将a/b=i的问题转化为在i和b的范围内寻找满足a的条件的值。又通过i和n*i将i和b联系起来,缩小循环求解的范围。然后就是判断n和i*n是否由0-9十个不同地数字排列组合而成的两个五位数。设置一个判断函数,在函数内定义一个长度为十的一维数组,用来存储十个数字,并将其初始化为除0-9以外的数值。函数的形参是n和i*n。通过除10取余的五次循环,依次求出五位数的各位数字,并将其存到与其自身相等的数组的位置中p[m]=m。然后通过循环判断当0<=K<=9时是否都有p[k]!=k,如果都有则函数返回1,否则返回0。在主函数中设置累加变量sum,用来累计这样的组合一共有多少个

#include<iostream>

using namespace std;
int Panduanbudeng(int a,int b)//判断两个数是不是由十个数字排列组合而成
{
	int p[10]={11};//设置一个数组,用来存放数字;初始化数组,数组中不能出现的数值至少应该大于等于十,否则会对接下来的求位数造成干扰;
	int m=0;//过度变量
	for(int i=0;i<5;i++)//用循环的方法依次求出五位数a的各个位数
	{
		
		m=a%10;//求余,取余数
		p[m]=m;//将对应的数字放到数组中对应的位置,如a[1]=1
		a=a/10;//求下一位的数字
	}
	for(int j=0;j<5;j++)//求形参b的各位数字
	{
		m=b%10;
		p[m]=m;
		b=b/10;
	}
	for(int k=0;k<10;k++)//判断a和b的各位数字是否有重复
	{
		if(p[k]!=k)//若有重复,则必有a[n]=11;其中n属于0-9;
		return 0;
	}
	return 1;//若各位数字都不同,则返回1
}

int main()
{
	int n,i;
	int sum=0;//累计次数,并初始化
	for(i=2;i<=79;i++)//求i范围内的循环
	    for(n=1234;n*i<=98765;n++)//嵌套循环,两个五位数相除变为分母乘以商,并控制循环范围
		if(Panduanbudeng(n,i*n))//判断是否
		    sum=sum+1;
	printf("%d\n",sum);
}

输出结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值