用php解决一个数学题【已有很多高手解决,期待更好的算法的出现】

 更新时间:2016年11月25日 16:11  点击:1573
http://www.111cn.net/html/00/54500_itemid_29653.html

一个六位数,当分别用2,3,4,5,6乘它后,得到的五个乘积都是一个六位数,而且这得到的五个数是由原来六个数字组成,只是顺序改变了!
求高手帮助解决下!




---------------

貌似大家都默认了一个现象
http://www.111cn.net/viewthread.php?tid=54377&page=5#pid394850

之前提出的一个假设 貌似大家做算法的时候都不考虑这种情况的存在可能 如果哪位有论证过这种假设不成立或者楼主的题目本身就默认不考虑这种假设 请大侠们说明一下

如果没有论证或者题目没有明确说明不考虑这种假设 算法设计再好也是不合题意的无效算法


------------------------



写了两种算法:
第一种思路是判断相乘的数的各个位之和是否相等,不过效率不太好。
第二种算法换了一种思路,用了字符反方向验证,因为正向会有一部分高位的不必要的运算。代码很简洁,效率很不错,附上代码:

第一种算法,判断各个位数之和:


===========================================================

第二种算法,字符反方向查询:



第一个算法在我的PE2140@2.66GHz上需要440ms,第二种只需要180ms。




---------------------------------



我之前提过这个问题了http://www.111cn.net/bbs/thread-54377-2-1.html

解决的方法有一个:
得出每一位,逐个位排除.
如得两个位数相同,则两个同时删除或更改.
比如:
''123451''和''123456''
逐位删除或更改的话,剩下的一位就不等了.





----------------------------------



for($i = 100000;$i < 166667;$i++)  //数的范围
{
....
        for($ii=2;$ii<7;$ii++)  // 2-6的倍数
        {
.....
                for($j=0;$j<6;$j++)           //数的个数
                {
if(strpos($i,substr($i*$ii,$j, 今天做读取文件练习的时候遇到一个问题,遂在百度上寻找相关解决方法.发现此篇文章,自我感觉良好,特转载过来,供大家参考,相信大家会有不一样的收获..

    fopen 方法可能是以前的 C 和 C++ 程序员最熟悉的,因为如果您使用过这些语言,那么它们或多或少都是您已掌握多年的工具。对于这些方法中的任何一种,通过使用 fopen(用于读取数据的函数)的标准方法打开文件,然后使用 fclose 关闭文件,如清单 1 所示。

    清单1:用fgets打开并读取文件

$file_handle = fopen("myfile", "r");

while (!feof($file_handle)) {

$line = fgets($file_handle);

echo $line;

}

fclose($file_handle);

    虽然大多数具有多年编程经验的程序员都熟悉这些函数,但是让我对这些函数进行分解。有效地执行以下步骤:

    1、打开文件。$file_handle 存储了一个对文件本身的引用。

    2、检查您是否已到达文件的末尾。

    3、继续读取文件,直至到达文件末尾,边读取边打印每行。

    4、关闭文件。

    记住这些步骤,我将回顾在这里使用的每个文件函数。

    fopen

    fopen 函数将创建与文件的连接。我之所以说“创建连接”,是因为除了打开文件之外,fopen 还可以打开一个 URL:

$fh = fopen("http://127.0.0.1/", "r");

    这行代码将创建一个与以上页面的连接,并允许您开始像读取一个本地文件一样读取它。

    注: fopen 中使用的 “r” 将指示文件以只读方式打开。由于将数据写入文件不在本文的讨论范围内,因此我将不列出所有其他选项。但是,如果是从二进制文件读取以获得跨平台兼容性,则应当将 “r” 更改为 “rb”。稍后您将看到这样的示例。

    feof

    feof 命令将检测您是否已经读到文件的末尾并返回 True 或 False。清单 1 中的循环将继续执行,直至您达到文件“myfile”的末尾。注:如果读取的是 URL 并且套接字由于不再有任何数据可以读取而超时,则 feof 也将返回 False。

    fclose

    向前跳至清单 1 的末尾,fclose 将实现与 fopen 相反的功能:它将关闭指向文件或 URL 的连接。执行此函数后,您将不再能够从文件或套接字中读取任何信息。

    fgets

    在清单 1 中回跳几行,您就到达了文件处理的核心:实际读取文件。fgets 函数是处理第一个示例的首选武器。它将从文件中提取一行数据并将其作为字符串返回。在那之后,您可以打印或者以别的方式处理数据。清单 1 中的示例将精细地打印整个文件。

    如果决定限制处理数据块的大小,您可以将一个参数添加到 fgets 中限制最大行长度。例如,使用以下代码将行长度限制为 80 个字符:

$string = fgets($file_handle, 81);

    回想 C 中的“”字符串末尾终止符,将长度设为比实际所需值大一的数字。因而,如果需要 80 个字符,则以上示例使用 81。应养成以下习惯:只要对此函数使用行限制,就添加该额外字符。

    fread

    fgets 函数是多个文件读取函数中惟一一个可用的。它是一个更常用的函数,因为逐行解析通常会有意义。事实上,几个其他函数也可以提供类似功能。但是,您并非总是需要逐行解析。

    这时就需要使用 fread。 simpleXML是php5的新特性。RSS是如今比较流行的哈。这里提供一个简单的演示,来获取php.net的RSS
复制内容到剪贴板
代码:
<?  
$cache="phpnews.xml";  
$rssurl="http://www.php.net/news.rss";  
header("content-type:text/html;charset=utf-8");  
if( file_exists("$cache") )  

{  

$m=filemtime("$cache");  

$n=time();  

if($n-$m>10800)  
{  
$rss=simplexml_load_file("$rssurl");  
$rss->asXML("$cache");  

}  
else  
$rss=simplexml_load_file("$cache");  
  
}  

else  
{  
$rss=simplexml_load_file("$rssurl");  
$rss->asXML("$cache");  

}  

  
foreach($rss->item as $item)  

  
print "<a href="$item->link" target=_blank> $item->title </a><br>n";  

  

?> 
 

<

1.如果一个方法可静态化,就对它做静态声明。速率可提升至4倍。

2.echo 比 print 快。

3.使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接。

4.在执行for循环之前确定最大循环数,不要每循环一次都计算最大值。

5.注销那些不用的变量尤其是大数组,以便释放内存。

6.尽量避免使用__get,__set,__autoload。

7.require_once()代价昂贵。

8.在包含文件时使用完整路径,解析操作系统路径所需的时间会更少。

9.如果你想知道脚本开始执行(译注:即服务器端收到客户端请求)的时刻,使用$_SERVER[‘REQUEST_TIME’]要好于time()。

10.函数代替正则表达式完成相同功能。

11.str_replace函数比preg_replace函数快,但strtr函数的效率是str_replace函数的四倍。

12.如果一个字符串替换函数,可接受数组或字符作为参数,并且参数长度不太长,那么可以考虑额外写一段替换代码,使得每次传递参数是一个字符,而不是只写一行代码接受数组作为查询和替换的参数。

13.使用选择分支语句(译注:即switch case)好于使用多个if,else if语句。

14.用@屏蔽错误消息的做法非常低效。

15.打开apache的mod_deflate模块。

16.数据库连接当使用完毕时应关掉。

17.$row[‘id’]的效率是$row[id]的7倍。

18.错误消息代价昂贵。

19.尽量不要在for循环中使用函数,比如for ($x=0; $x < count($array); $x)每循环一次都会调用count()函数。

20.在方法中递增局部变量,速度是最快的。几乎与在函数中调用局部变量的速度相当。

21.递增一个全局变量要比递增一个局部变量慢2倍。

22.递增一个对象属性(如:$this->prop++)要比递增一个局部变量慢3倍。

23.递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。

24.仅定义一个局部变量而没在函数中调用它,同样会减慢速度(其程度相当于递增一个局部变量)。PHP大概会检查看是否存在全局变量。

25.方法调用看来与类中定义的方法的数量无关,因为我(在测试方法之前和之后都)添加了10个方法,但性能上没有变化。

26.派生类中的方法运行起来要快于在基类中定义的同样的方法。

27.调用带有一个参数的空函数,其花费的时间相当于执行7至8次的局部变量递增操作。类似的方法调用所花费的时间接近于15次的局部变量递增操作。

28.用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会。当然,只有当你不需要在字符串中包含变量时才可以这么做。

29.输出多个字符串时,用逗号代替句点来分隔字符串,速度更快。注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册中说echo是语言结构,不是真正的函数,故把函数加上了双引号)。

30.Apache解析一个PHP脚本的时间要比解析一个静态HTML页面慢2至10倍。尽量多用静态HTML页面,少用脚本。

31.除非脚本可以缓存,否则每次调用时都会重新编译一次。引入一套PHP缓存机制通常可以提升25%至100%的性能,以免除编译开销。

32.尽量做缓存,可使用memcached。memcached是一款高性能的内存对象缓存系统,可用来加速动态Web应用程序,减轻数据库负载。对运算码 (OP code)的缓存很有用,使得脚本不必为每个请求做重新编译。

33.当操作字符串并需要检验其长度是否满足某种要求时,你想当然地会使用strlen()函数。此函数执行起来相当快,因为它不做任何计算,只返回在 zval 结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度。但是,由于strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步 骤,如字母小写化(译注:指函数名小写化,PHP不区分函数名大小写)、哈希查找,会跟随被调用的函数一起执行。在某些情况下,你可以使用isset() 技巧加速执行你的代码。

(举例如下)
if (strlen($foo) < 5) { echo “Foo is too short”; }
(与下面的技巧做比较)
if (!isset($foo{5})) { echo “Foo is too short”; }

调用isset()恰巧比strlen()快,因为与后者不同的是,isset()作为一种语言结构,意味着它的执行不需要函数查找和字母小写化。也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。

在javascript中使用php风格的$globals

JavaScript有隐含的全局变量。当你不使用var来定义a = 1,而直接定义a=1时,这个变量a将成为一个全局变量。有的认为这是一个错误,应该避免全局变量,因为它们往往会在意想不到的地方出错,尤其是在项目参与人员很多的情况下。

在PHP当中,默认的是局部变量。如果你需要一个全局变量,那么你必须要将要声明为全局变量的变量放到$globals这个数组中。

怎样在javascripts中使用$globals呢?通过为全局公约在你的javascripts呢?在脚本文件顶部声明:
$GLOBALS = {};
那么每一次当你需要一个全局变量,您可以这样做:

$GLOBALS[ '' myglob '' ] = 1 ; / /非常像PHP的样式

或者如果你喜欢,也可以这样:

$globals.myglob = 1 ;
这样做的优点:

     *全局变量容易识别(甚至从飞机都可以看见)
     *如果变量不定义成$GLOBAL,那么它就是局部变量。如果变量没有使用var,那么它将产生一个错误

缺点:

     *这种使用方法,不是官方规定的,不强制使用,只是一项约定俗成的方法。

 

 

Stoyan Stefanov''s Blog: PHP-style $GLOBALS in Javascript?

Javascript has implied globals. When you skip the var in var a = 1; and go a = 1;, then a becomes a global variable. Some consider this an error in the language. Global variables should be avoided because they tend to overwrite each other in unexpected places, especially if the project grows in LOC and number of developers.
In PHP on the other hand, variables are local. If you need a global variable, then you have to have to be explicit about it using the $GLOBALS superglobal array.
So how about this: adopt the $GLOBALS convention in your JavaScripts? At the top of the script you go:
$GLOBALS = {};
Then every time you need a global variable, you do:
$GLOBALS[''myglob''] = 1; // very PHP-like
or if you prefer:
$GLOBALS.myglob = 1;
Benefits of the approach:
• global variables easy to spot (even from an aeroplane)
• if it''s not $GLOBAL, it''s meant to be local. If it''s missing the var, it''s an error
Drawback:
• It''s a convention, so it can only help, but not enforce any coding practices

[!--infotagslink--]

相关文章

  • 409错误是什么 http 409错误怎么解决

    409错误是什么?http 409错误怎么解决呢?不少站长在遇到这个错误代码之后都一筹莫展,本次一聚教程网为大家带来了详细的说明,快来看看吧。 409错误是什么: HTTP 40...2017-01-22
  • http 405错误是什么 http 405错误怎么解决

    http 405错误是什么?http 405错误怎么解决?相信很多站长都在找这两个问题的答案,本次小编为大家带来了详细的教程,快来看看吧。 405错误是什么: HTTP 405错误是H...2017-01-22
  • 403错误是什么 403错误怎么解决

    403错误是HTTP状态码的一种,属于“请示错误”,表示服务器拒绝请求。如果在搜索引擎尝试抓取您网站上的有效网页时显示此状态代码,那么,这可能是您的服务器或主机拒绝搜索...2017-01-22
  • C#几种排序算法

    作者:Sabine 【导读】本文介绍了C#的四种排序算法:冒泡排序、选择排序、插入排序和希尔排序  冒泡排序 using System; namespace BubbleSorter { public class Bubb...2020-06-25
  • 412错误是什么 412错误怎么解决

    412错误是什么?412错误怎么解决?本次一聚教程网将为大家带来详细的介绍,帮助大家全面了解412错误的意思以及解决412错误的方法。 412错误是什么: HTTP 412错误,(Precond...2017-01-22
  • Perl CPAN::Modulelist的解决办法

    今天用CPAN安装Term::ReadLine,报了个这样的错误 Going to read /root/.cpan/sources/modules/03modlist.data.gz Can't locate object method "data" via package "C...2016-11-25
  • 经典实例讲解C#递归算法

    这篇文章主要用实例讲解C#递归算法的概念以及用法,文中代码非常详细,帮助大家更好的参考和学习,感兴趣的朋友可以了解下...2020-06-25
  • 406错误是什么 406错误怎么解决

    HTTP 406错误是HTTP协议状态码的一种,表示无法使用请求的内容特性来响应请求的网页。一般是指客户端浏览器不接受所请求页面的 MIME 类型。 而MIME类型是在把输出...2017-01-22
  • 407错误是什么 407错误怎么解决

    407错误是什么?407错误怎么解决?不少站长都遇到过407错误,下面小编将告诉大家如何处理407错误。 407错误是什么: HTTP 407错误是HTTP协议状态码的一种,表示需要代...2017-01-22
  • 410错误是什么 http 410错误怎么解决

    410错误是HTTP协议状态码的一种,本次一聚教程网将为大家详细介绍HTTP 410错误是什么,以及410错误的解决办法。 410错误是什么: HTTP 410错误是HTTP协议状态码的...2017-01-22
  • HTTP 400错误是什么 HTTP 400错误怎么解决

    每当遇到http错误代码为400,代表客户端发起的请求不符合服务器对请求的某些限制,或者请求本身存在一定的错误,那么HTTP 400错误怎么解决呢?请看下文介绍。 目前400错...2017-01-22
  • Jrebel启动失败解决方案详解

    这篇文章主要介绍了Jrebel启动失败解决方案详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-07
  • C#中实现任意List的全组合算法代码

    这篇文章主要是介绍了.net C# 实现任意List的全组合算法实现代码,需要的朋友可以参考下...2020-06-25
  • 同时兼容JS和C#的RSA加密解密算法详解(对web提交的数据加密传输)

    这篇文章主要给大家介绍了关于同时兼容JS和C#的RSA加密解密算法,通过该算法可以对web提交的数据进行加密传输,文中通过图文及示例代码介绍的非常详细,需要的朋友们可以参考借鉴,下面来一起看看吧。...2020-06-25
  • js实现文本框输入文字个数限制代码

    这篇文章主要介绍了js实现文本框输入文字个数限制代码,文本框输入的文字个数并不是无限制的,一般都会限定一个输入最高上限,如何限制,请看本文...2015-12-27
  • 图文详解Heap Sort堆排序算法及JavaScript的代码实现

    这篇文章以图文详解Heap Sort堆排序算法及JavaScript的代码实现,堆排序算法基于类二叉树的堆数据结构,需要的朋友可以参考下...2016-05-05
  • 小记一次mysql主从配置解决方案

      今天研究了个开源项目,数据库是mysql的,其中的脚本数据需要备份,由于本人的机器时mac pro,而且mac下的数据库连接工具都不怎么好用,就想着如何利用windows下的数据库连接工具使用,并做相关备份,另外windows系统下的sqlyo...2015-10-21
  • c#求两个数中最大值的方法

    这篇文章主要介绍了c#求两个数中最大值的方法,需要的朋友可以参考下...2020-06-25
  • c# n个数排序实现代码

    c# n个数排序实现代...2020-06-25
  • php 502 bad gateway的解决方案

    502 bad gateway是php-fpm的问题对于这个问题就是配置参数的问题了,下面我们整理了一些关于php-fpm错误问题的解决办法,具体如下。 今天升级完PHP出现了502 Bad Gat...2016-11-25