求各位高手帮我这个程序

richard_ma 2005-09-12 08:23:06
求一个这样的6位数,它乘2,3,4,5,6均是其原数中数字的不同组合,且还是6为数
提示:
(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个数均相同,则该数满足要求。

...全文
119 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Leaveye 2005-09-16
  • 打赏
  • 举报
回复
这是数字 7 的一个有趣的性质。

7 被 1 除得到的小数循环节有六位,且从 1 到 6 除以 7 得到的小数循环节都是同样的六个数字,只是顺序不同。却同样是一样的循环。列举如下:
1/7 = .142857 142857 142857 ...
2/7 = .2857 142857 142857 14 ...
3/7 = .42857 142857 142857 1 ...
4/7 = .57 142857 142857 1428 ...
5/7 = .7 142857 142857 14285 ...
6/7 = .857 142857 142857 142 ...
这六个数字前后关系固定,且有一点有趣的相互关系:
7 * 2 = 14 * 2 = 28 * 2 + 1 = 57 * 2 =(模100)= 14 ...

这个东西完全不是新东西。记录在196几年出版的一本叫做《算得快》的趣味算术书上的。作者姓刘。
Leaveye 2005-09-16
  • 打赏
  • 举报
回复
1/7 是个有理数对吧,就必然是个无限循环小数了。它的循环节是 142857。
那么,2/7 的循环节就是 142857 * 2。……。
特别地,对于 7/7 :
7/7 = 7 * (1/7) = 7 * 0.142857... = 0.999999... = 1
从一个特例证明了等比级数和的公式。
darkstar21cn 2005-09-13
  • 打赏
  • 举报
回复
Leaveye(~枝)(一点不了解系统,也懒得实际量测性能) ( )

没看懂,能解释一下否?
xiaocai0001 2005-09-12
  • 打赏
  • 举报
回复
这题比较有意思
6位数时结果:
142857
7位数时:
1428570
1429857
8位数时:
14285700
14298570
14299857
9位数时:
142857000
142985700
142998570
142999857
xiaocai0001 2005-09-12
  • 打赏
  • 举报
回复
不好意思,上面的程序有点问题
应该是
#include <iostream.h>
#include <string.h>
void InitBit(int *Data, int n);

int main()
{
int i;
int base[10];
int cmp[10];
for(i=100008; i<=166666; i+=9)
{
InitBit(base, i);
InitBit(cmp, i*2);
if(memcmp(base, cmp, 10*sizeof(int)) != 0)
continue;
InitBit(cmp, i*3);
if(memcmp(base, cmp, 10*sizeof(int)) != 0)
continue;
InitBit(cmp, i*4);
if(memcmp(base, cmp, 10*sizeof(int)) != 0)
continue;
InitBit(cmp, i*5);
if(memcmp(base, cmp, 10*sizeof(int)) != 0)
continue;
InitBit(cmp, i*6);
if(memcmp(base, cmp, 10*sizeof(int)) != 0)
continue;
cout<<i<<endl;
}
return 0;
}

void InitBit(int *Data, int n)
{
memset(Data, 0, 10*sizeof(int));
while(n>0)
{
Data[n%10] ++;
n = n/10;
}
}
xiaocai0001 2005-09-12
  • 打赏
  • 举报
回复
用一个程序试了一下
果然是142857!

改成7位数时,有两个结果
1428570
1429857

#include <iostream.h>
#include <string.h>
void InitBit(int *Data, int n);

int main()
{
int i;
int base[10];
int cmp[10];
for(i=100008; i<=166666; i+=9)
{
InitBit(base, i);
InitBit(cmp, i*2);
if(memcmp(base, cmp, 10) != 0)
continue;
InitBit(cmp, i*3);
if(memcmp(base, cmp, 10) != 0)
continue;
InitBit(cmp, i*4);
if(memcmp(base, cmp, 10) != 0)
continue;
InitBit(cmp, i*5);
if(memcmp(base, cmp, 10) != 0)
continue;
InitBit(cmp, i*6);
if(memcmp(base, cmp, 10) != 0)
continue;
cout<<i<<endl;
}
return 0;
}

void InitBit(int *Data, int n)
{
int i;
for(i=0; i<10;i++)
Data[i] = 0;
while(n>0)
{
Data[n%10] ++;
n = n/10;
}
}
Leaveye 2005-09-12
  • 打赏
  • 举报
回复
142857

1/7 = 0.142857 142857 ...
2/7 = 0.285714 285714 ...
3/7 = 0.428571 428571 ...
4/7 = 0.571428 571428 ...
5/7 = 0.714285 714285 ...
6/7 = 0.857142 857142 ...
7/7 = 0.999999 999999 ... = 1

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧