| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 772 人关注过本帖
标题:算法问题(数字游戏)
只看楼主 加入收藏
fl8962
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:539
专家分:2471
注 册:2012-10-17
结帖率:96.23%
收藏
已结贴  问题点数:100 回复次数:7 
算法问题(数字游戏)
135×2.6=351;270270×2.6=702702;这两个乘法有个共同点,135乘以2.6后,结果等于把开头第一个数字放到最后。135×2.6=351,135中的1移位到最后一位就变成了351,也就是正确的结果。
题目是,输入一个1《X《1000的数字(该数字为X),X最多保留小数点后四位。然后找出所有满足上述条件的数字y, 使得y*x= 满足上述条件。比如当x=2.6时候,当y=135,270,135135,270270;时候满足上述条件。
求最快的算法。
搜索更多相关主题的帖子: 小数点 共同点 游戏 
2014-09-23 05:14
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:100 
没想出什么特别好的算法
程序代码:
#include <stdio.h>

void foo( double x )
{
    for( unsigned base=1; base<100000000; base*=10 )
    {
        for( unsigned a=1; a<10; ++a )
        {
            // {(a*base + b)*x == b*10 + a}  ==> {b/a = (base*x-1)/(10-x)}
            unsigned b = (unsigned)(a*(base*x-1)/(10-x));
            if( b<base && b*(10-x)==a*(base*x-1) )
                printf( "%u\n", a*base+b );
        }
    }
}

int main (void)
{
    foo( 2.6 );

    return 0;
}

2014-09-23 09:31
rladlgud
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2014-9-23
收藏
得分:0 
楼主的是 c++ 还是 c语言那
2014-09-23 10:17
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 3 楼 rladlgud
看这个
#include <stdio.h>

DO IT YOURSELF !
2014-09-23 14:19
fl8962
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:539
专家分:2471
注 册:2012-10-17
收藏
得分:0 
回复 2 楼 rjsp
bi wo xie de kuai duo le ...

想抽苏烟了。
2014-09-23 21:21
stop1204
Rank: 9Rank: 9Rank: 9
来 自:福建省
等 级:贵宾
威 望:22
帖 子:295
专家分:1151
注 册:2013-9-8
收藏
得分:0 
[quote]以下是引用rjsp在2014-9-23 09:31:32的发言:
运行没结果.

hl928452957@gmail点com

2014-09-25 03:26
stop1204
Rank: 9Rank: 9Rank: 9
来 自:福建省
等 级:贵宾
威 望:22
帖 子:295
专家分:1151
注 册:2013-9-8
收藏
得分:0 
我还以为  123123 *2.6 = 231231

这样的话就 135 跟 270

hl928452957@gmail点com

2014-09-25 07:25
stop1204
Rank: 9Rank: 9Rank: 9
来 自:福建省
等 级:贵宾
威 望:22
帖 子:295
专家分:1151
注 册:2013-9-8
收藏
得分:0 
没的想.. 排除一些  1111  2222  123456  7654321 这样的规律数..  

3999999 这个就认为是包括小数吧.399.9999
为什么不要400以上.. 400 * 2.6 = 1040  三位数变成四位数了.
程序代码:
#include "iostream"
using namespace std;
int re(int i);
main()
{
    int i = 1;
    while (i++ < 3999999)       
        if ( i * 2.6 == re(i) )
            cout << "Matching: " << i << endl;
}
int re(int i)
{
    return i % 100 * 100 / 10 + i/100;
}

Matching: 135
Matching: 270
[Finished in 0.1s]

[ 本帖最后由 stop1204 于 2014-9-25 07:56 编辑 ]

hl928452957@gmail点com

2014-09-25 07:52
快速回复:算法问题(数字游戏)
数据加载中...
 
   



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

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