题目来源:http://tz.ahalei.com/problems/view/67
题目内容:125874和它的二倍,251748, 包含着同样的数字,只是顺序不同。
找出最小的正整数x,使得 2x, 3x, 4x, 5x, 和6x都包含同样的数字。
解题思路:先找出2x, 3x, 4x, 5x, 和6x的位数都相等。再找出每个数字出现的频率相等。
<span style="color: rgb(54, 46, 43); font-family: Arial; font-size: 14px; line-height: 26px;"> </span><span style="color: rgb(54, 46, 43); font-family: Arial; font-size: 14px; line-height: 26px;"><span style="font-size: 18px;"><textarea readonly="readonly" name="code" class="c++"> </span></span>
#include<stdio.h>
#include <string.h>
//挑战67 找出最小的正整数x,使得 2x, 3x, 4x, 5x, 和6x都包含同样的数字。
int main()
{
int count1,count2,i,j,t,flag=0;
int a[7];
int b[50];
int count(int a,int b[],int m);
for(i=1;i<=10000000;i++)
{
memset(b,0,sizeof(b));//将数组b的元素全置为0
flag=0;
for(j=2;j<=6;j++)//计算2X 3X 4X 5X 6X的位数
a[j]=count(i*j,b,j-2);
if((a[2]==a[3])&&(a[3]==a[4])&&(a[4]==a[5])&&(a[5]==a[6]))
//先判断这6个数的位数是否全相等
{
for(t=0;t<=9;t++)
//再判断出现的数字 频率是否相等
{
if((b[t]==b[t+10])&&(b[t+10]==b[t+20])&&(b[t+20]==b[t+30])&&(b[t+30]==b[t+40]))
flag+=1;
else
break;
}
}
if(flag==10)
printf("%d\n",i);
}
return 0;
}
int count(int a,int b[],int m)
{
int count1=0;
int rem;
int k;
while(a!=0)
{
rem=a%10;
for(k=0;k<=9;k++)
{
if(rem==k)
b[k+m*10]=b[k+m*10]+1;//统计输入的数 是由那几个数字构成的
}
a=(a-a%10)/10;
count1++; //统计输入的数的位数
}
return count1;
}
<span style="color: rgb(54, 46, 43); font-family: Arial; font-size: 18px; line-height: 26px;"></textarea></span>