啊哈挑战 第67解答 又见神秘X

来源:互联网 发布:圆方软件价格 编辑:程序博客网 时间:2024/04/27 14:35

  题目来源: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>




0 0
原创粉丝点击