回 帖 发 新 帖 刷新版面

主题:C++编程,求高手帮忙,不胜感激

题目:求一个这样的6位数,它乘2,3,4,5,6均是其原数的不同组合

设计方法和基本原理

1.  问题描述: 

要找这样的的一个6位数,即由6个数字组成,当它分别乘2,3,4,5,6后得到的积也是由原数的6个数字组成的,即仍为6位数。

2.  问题的解决方案:

根据问题描述,可以将问题解决分为三步:

(1)确定该数的范围,因为该数在乘2,3,4,5,6后得到的积也为6位数,所以,该数最大应不超过:1000000/6=166667,因此可以在100000~166667范围内搜索;

(2)进一步优化:由于这个数乘3为原来数字的组合,说明原来的数是3的倍数(一个数若为3的倍数,则该数的各个位之和为3的倍数)。由于这个数是3的倍数,则这个数乘3后的数,定为9的倍数。所以这个数为9的倍数(一个数若为9的倍数,则该数的各个位之和为9的倍数)。这样搜索范围缩小为100008开始到166666,步长为9。

(3)分离出该数的6位数字,存放到一个数组中,而后将该数乘2、3、4、5、6后得到的积也分离出来存放到数组中。将得到的这些数组进行排序,而后再重新组成6个6位数,若这6个数均相同,则该数满足要求。

四、主要技术问题的描述

根据三的分析, 主要问题在于数的各位数的分离和重新组合。如该数为num,其各位存放到数组a[6]中,

t=num;     //分离num的各位数

for(int i=5;i>=0;i--)

{

       a[i]=t%10;     //分离将个位存放到a[5],十位存放到a[4]…最高位存放到a[0]

       t=num/10;

}

回复列表 (共1个回复)

沙发

#include<iostream>
#include<stdio.h>   
using namespace std;
void sort(int a[6]);
void dis(int a[6],int num);     //函数声明
int equal(int x1[6],int x2[6],int x3[6],int x4[6],int a[6]);

int main()
{
  int a[6],x1[6],x2[6],x3[6],x4[6];
  int num,e,b,c,d,k;
  for(num=100008;num<166667;num++)
  {
    
    e=num*6;b=num*3;c=num*4;d=num*5;
    dis(x1,e);
    dis(x2,b);
    dis(x3,c);
    dis(x4,d);               //把数字放到数组中
    dis(a,num);

    sort(x1);
    sort(x2);
    sort(x3);                          //数组排列
    sort(x4);
    sort(a);
   k=equal(x1,x2,x3,x4,a);
     if(k)
     {    cout<<num<<endl;  
        
     }
    
         

  }
 system("pause");
 return 0;



}
void sort(int a[6])                     //数组里进行排列,由小到大
{
  int i,t,j;
  for(j=0;j<5;j++)
      for(i=0;i<5-j;i++)
      
      {
          if(a[i]>a[i+1])
          {
              t=a[i];
              a[i]=a[i+1];
              a[i+1]=t;
          }

      }

}
void dis(int a[6],int num)                //把一个6位数各位分别放到一个数组中

    //int a[6];
    a[0]=num/100000;                     //最高位
    a[1]=num/10000%10;
    a[2]=num/1000%100%10;
    a[3]=num/100%1000%100%10;
    a[4]=num/10%10000%1000%100%10;
    a[5]=num%100000%10000%1000%100%10;    //个位
   // return a;


}
int equal(int x1[6],int x2[6],int x3[6],int x4[6],int a[6])
{
  int i,b,c,d,e,k;
    for(i=0;i<6;++i)
    if(x1[i]!=a[i])
    break;
    if(i>=6)
     b=1;
    else
        b=0;
    for(i=0;i<6;++i)
    if(x2[i]!=a[i])
    break;
    if(i>=6)
    c=1;
    else
        c=0;
    for(i=0;i<6;++i)
    if(x3[i]!=a[i])
    break;
    if(i>=6)
    e=1;
    else
        e=0;
    for(i=0;i<6;++i)
    if(x4[i]!=a[i])
    break;
    if(i>=6)
    d=1;
    else 
        d=0;

    k=b*c*d*e;
    return k;
}
最后得到这个数字结果为142857

我来回复

您尚未登录,请登录后再回复。点此登录或注册