| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 902 人关注过本帖, 2 人收藏
标题:求大牛帮解答
只看楼主 加入收藏
zzw983254
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-5-11
结帖率:0
收藏(2)
已结贴  问题点数:20 回复次数:7 
求大牛帮解答
一个自然数A,若将其数字重新排列可得一个新的自然数B,如果A恰是B的三倍,则A是一个希望数,如3105=3×1035,7425=3×2475,求10000以内的希望数
搜索更多相关主题的帖子: 解答 
2010-09-25 10:59
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:4 
这个的核心就是数字重新排列的算法

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2010-09-25 11:12
Windy0Winll
Rank: 2
来 自:走了
等 级:等待验证会员
帖 子:71
专家分:90
注 册:2010-8-26
收藏
得分:4 
程序代码:
int main( void ) {
                   printf(" 3105 7425 \n");
                   return   0;
                 }
这个代码怎么样?

我简单算了一下,好象10000以内的所谓希望数一共就这两个,也可能有某个地方我算错了:
10000以内的希望数一定会满足下面的条件:
 1. 最后一个数字一定是5,如3105
 2. 这个数一定是一个4位数,2位3位一定不可能;
 3. 这个数一定是9的倍数,所以各个位上的数字(除去已知最后一个5)相加一定会等于4,13,22(不可能等于31)
 4. 准确的说,相加只能是4和13,不能是22
 5. 由于是4位数,那么一定会至少有1,2,3这3个数字之一。

悄悄地来。。。 然后悄悄地走。。。。。。
2010-09-25 17:10
shinan77
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:87
专家分:188
注 册:2010-9-24
收藏
得分:4 
这个程序的难点在于如何把一个数中每一位的数字提取出来,可以用下面这个算法:
程序代码:
int i=0,q=0,b=0,s=0,g=0;
    for(i=1;i<=10000;i++)
    {
            q=i/1000;
    b=(i-q*1000)/100;s=(i-q*1000-b*100)/10;g=(i-q*1000-b*100-s*10);
          //千,百,十,个位分别赋给了q,b,s,g,再将这几个数字排列组合就能实现
          }

--------将学到的东西为我所用,这才是学习的目的 --------
2010-09-25 18:49
zzgzzg00
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:388
专家分:627
注 册:2010-8-2
收藏
得分:4 
int ten(int t)
{
int i,a=1;
for(i=0;i<=t;i++)
a=a*10;
a=a/10;
}
main()
{
 int a,b,c,d,s,i,j,k,l;
 clrscr();
 for(s=1;s<10000;s++)
 {
  a=s/1000;
  b=s%1000/100;
  c=s%100/10;
  d=s%10;
  for(i=0;i<=3;i++)
   for(j=0;j<=3;j++)
  {
   if(i!=j)
   for(k=0;k<=3;k++)
   {
    if(i!=k&&j!=k)
    for(l=0;l<=3;l++)
    {
     if(i!=l&&j!=l&&k!=l)
     {
      if(s==3*(a*ten(i)+b*ten(j)+c*ten(k)+d*ten(l)))
      printf("%d,%04d\n",s,a*ten(i)+b*ten(j)+c*ten(k)+d*ten(l));
     }
    }
   }
  }
 }
}

粗心是大敌
2010-09-25 19:32
zzgzzg00
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:388
专家分:627
注 册:2010-8-2
收藏
得分:0 
1053--0351
3105--1035
7425--2475
似乎就这三个解了

粗心是大敌
2010-09-25 19:33
m1c2f4843
Rank: 1
等 级:新手上路
帖 子:27
专家分:4
注 册:2010-7-30
收藏
得分:4 
这个不难
2010-09-25 20:00
Windy0Winll
Rank: 2
来 自:走了
等 级:等待验证会员
帖 子:71
专家分:90
注 册:2010-8-26
收藏
得分:0 
嗯 ,楼上的答案应该是正确的。

不过对于这个解题目的方法,并不要那样:
我们应从自然数B入手,自然数数B的最高位就只有3种情况,0,1,2,3(开始我忽略了0)[如果是0的话,那么A的最高位一定是1或者2] [如果不是0的话,那么A的最低位一定是5].然后自然数A和自然数B一定是被9整除的,因为A是3的倍数,所以B也是3的倍数,这样A就是9的倍数(各个位上的数相加是9的倍数)。自然数A的最高位是 自然数B的最高位 的3倍 加 0 或者 1 或者2。如果写成代码的话,这样至少比从A直接考虑 要检验的数少的多的多,可能是后者的 1/20.[从B考虑,只要检验0到4000中9的倍数就可以了]


[ 本帖最后由 Windy0Winll 于 2010-9-25 20:22 编辑 ]

悄悄地来。。。 然后悄悄地走。。。。。。
2010-09-25 20:09
快速回复:求大牛帮解答
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030729 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved