关闭

google的一道面世题:(f(n)==n)

标签: googlenumbers算法function
1309人阅读 评论(2) 收藏 举报
分类:

 

原贴地址:

http://community.csdn.net/Expert/topic/4211/4211591.xml?temp=.9405329

这个题目的英文原题是:
Consider a function which, for a given whole number n, returns the number of ones required when writing out all numbers between 0 and n.

For example, f(13)=6. Notice that f(1)=1. What is the next largest n such that f(n)=n?

翻译过来大体是这样:
有一个整数n,写一个函数f(n),返回0到n之间出现的"1"的个数。比如f(13)=6,现在f(1)=1,问下一个最大的f(n)=n的n是什么?

为什么f(13)=6, 因为1,2,3,4,5,6,7,8,9,10,11,12,13.数数1的个数,正好是6.

#include<iostream.h>
/*
这是我最初编的,速度太慢了。
int f10(int n){
 int r=1;
 for(int i=1;i<=n;i++)
  r=r*10;
 return r;
}

int f(int n){
 int r=0;
 for(int i=1;i<=n;i++){
  int a=1;
  do{
   if(i%f10(a)/f10(a-1)==1)
    r++;
   a++;
  }while(i/f10(a-1)!=0);
 }
 return r;
}
*/
/*
这是比较快的答案之一,但是看不懂。
int f(int n)
{
  int ret = 0;
  int ntemp=n;
  int ntemp2=1;
  int i=1;
  while(ntemp)
  {
    ret += (((ntemp-1)/10)+1) * i;
    if( (ntemp%10) <= 1 )
    {
      ret -= i;
    }
    if( (ntemp%10) ==1 )
    {
      ret += ntemp2;
    }
    ntemp = ntemp/10;
    i*=10;
    ntemp2 = n%i+1;
  }
  return ret;
}
*/

int f(int n){
 static int r=0;
 do{
  if(n%10==1) r++;
  n=n/10;
 }while(n);
 return r;
}

int main(){
 for(long i=1; i<=1111111110;i++)
  if(f(i)==i)
   cout<<i<<endl;
 cout<<"the end"<<endl;
 return 0;
}


蓝色部分的算法代码是我最初写的,算出下一个n要N长时间。哎……,看来还要继续努力啊!!!!

更新:我自己写的新算法,用一个静态变量来进行统计,遍历算出1111111110内的所有f(n)==n总共用14分钟,机器P4 1.8G 256M win2000.

那些吹几毫秒之内算出来的全是假的,不信请执行以下代码

#include<iostream.h>

int main(){
 for(long i=1; i<=1111111110;i++);
   cout<<"the end"<<endl;
 return 0;
}

在我的机器上要过4秒左右才会出现 the end.

0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:54358次
    • 积分:796
    • 等级:
    • 排名:千里之外
    • 原创:17篇
    • 转载:13篇
    • 译文:0篇
    • 评论:35条
    文章分类
    最新评论