`
suifeng
  • 浏览: 179416 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

统计1-N的1的个数------递归尝试

J# 
阅读更多

 准备用递归做, 前109通过, 后面的不行了, 代码的复杂度太大,违背代码应该简单明了的原则。

 

 

<script>
 //alert('0'.substr(1) === '');

 function count_1_from_1_to_N(N, index) {
  
  var first_char = N.substr(index,1); 
  var last_N = N.substr(index+1); 

  if (N == 0) {
   return 0;
  } else if (N < 0) {
   N = N * -1
  } else if (N < 10) {
   return 1;
  }
    

  if (last_N === '') {
   return 1;
  }

  if (first_char == 0) {
   return 0;
  }

  //alert("first_char : " + first_char);
  //alert("last : " + last_N);

  var value = 1 +  (first_char==1?(last_N-(-1)):0) + 1;
  // alert(value);
  //alert(first_char * sign((""+last_N).charAt(0)));
  var count = 0;

  var middle_count = 0;
  var last_left_str = last_N.substr(0, last_N.length-1);
  
  for (var i=0; i<last_left_str.length; i++) {
   if (last_left_str.charAt(i) == '1') {
    middle_count ++;
    alert(last_left_str);
   }
  }
  count = (N.length-index-1) * Math.pow(10, N.length-index-2) * first_char + sign(first_char-1)*Math.pow(10, N.length-index-1) + (first_char==1?(last_N-(-1))*(1+middle_count):0);// +  first_char * sign(last_N.charAt(0));
  //alert(count);
  return count + count_1_from_1_to_N(last_N, index+1);

        }

 function sign(n) {
  return n < 0 ? -1 : (n > 0 ? 1 : 0);
 }

 /*var N_arr = [1,3,9,10,11,12,13,14,15,16,17,18,19,20,21,22,30,31,32,40,41,42,50,51,60,61,70,71,80,81,90,91,100, 101,102,110,111,112, 1000, 10001, 10010, 10011,100112];

 for (var i =0; i<N_arr.length; i++) {
  //alert(N_arr[i]);
  var count = count_1_from_1_to_N(""+N_arr[i], 0);
  alert(N_arr[i] + " : " + count);
 }
*/
 var all_str = "";
 for (var i =0; i<122; i++) {
  //alert(N_arr[i]);
  all_str = all_str + i;
  var count_right = 0;
  for (var j=0; j<all_str.length; j++) {
   if (all_str.charAt(j) == '1') {
    count_right ++;
   }
  }
   
  var count = count_1_from_1_to_N(""+i, 0);

  if (count != count_right) {

   alert(i + " : " + count + " == " + count_right);
  }
  //alert(i + " : " + count + " == " + count_right);
 }
 

</script>

 

分享到:
评论

相关推荐

    C语言 递归调用程序和文件系统

    1.分别调试课件中的给定n求Fibonacci(n)递归与非递归函数,并编写测试函数对两种或多种不同方法所需时间进行比较,且当某一轮计算所需时间超过给定最大时间量时(如超过10秒),停止计算。计算过程中要求输出类似...

    Java练习题,实用于Java大部分人群

    - 定义递归函数,基线条件为当输入为1时返回1。 - 递归调用自身,每次递减输入值直到达到基线条件。 #### 23. 复利计算 - **知识点**:复利是指本金和之前累积的利息一起作为下一次计算利息的基础。 - **实现方法...

    算法编程试题==.docx

    - 使用斐波那契数列解决这个问题,斐波那契数列定义为:F(n) = F(n-1) + F(n-2),其中F(1) = 1, F(2) = 1。 - 通过迭代的方式,可以高效地计算出任意月份数量。 - **代码实现**: ```python def fibonacci(n): ...

    汇编语言程序设计练习题

    - 递归终止条件:设置递归的基本情况(如n=0或n=1时返回1)。 #### 练习题18:采用递归子程序输出字符串。 - **知识点**: - 递归输出:每次递归调用打印一个字符,直到字符串结束。 #### 练习题19:采用子程序...

    深度优先搜索算法_Pascal.ppt

    // 在主程序中,当子结点MR符合条件时,会继续尝试(I+1),直到找到目标结点或遍历完所有可能性 end; ``` 这里的`TRY`函数代表了对每个子结点的处理,如果子结点满足条件,则压栈并继续递归,否则回溯到上一层。 ##...

    java练习50题

    - 斐波那契数列的规律为:F(n) = F(n-1) + F(n-2),其中 F(1)=1, F(2)=1。 - 使用循环结构计算每月兔子总数,可以采用递归或迭代的方式实现。 - 演变后的斐波那契数列:1, 1, 2, 3, 5, 8, 13, 21...等。 #### 知识...

    java 经典习题.doc

    1. **斐波那契数列**:程序1中的兔子问题涉及到斐波那契数列,它是一种基于递归关系的数列,每个数字是前两个数字的和。 2. **素数判断**:程序2中,通过检查一个数能否被2到其平方根之间的所有数整除来判断是否为...

    Permutation with Repetition参考代码

    - 每组测试数据的第一行包含一个整数 \( n \)(\( 1 \leq n \leq 500 \)),表示元素的个数。 - 接下来的一行包含 \( n \) 个字符,表示待排列的元素。 **输出格式**: - 对应每组输入,输出所有不同的排列,每个...

    2017年第二十三届NOIP(C语言)普及组初赛试题及详细答案

    长度为n的串的子串数量为1+2+...+(n-1)+n=n(n+1)/2。因此,"copyright"的子串数量为10*11/2=55。 - **答案:** 没有提供选项中的正确答案。 **15. 十进制小数13.375对应的二进制数是()** - **解析:** 13转换为二...

    C C++程序基础练习题

    题目要求输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。 **解题思路:** 1. **字符串遍历:** 遍历输入的字符串中的每个字符。 2. **字符分类:** 判断每个字符属于哪一类(字母、空格、数字...

    数据结构与算法课设题目一1 (2).docx

    17. 八皇后问题:经典的回溯算法应用,通过递归尝试放置皇后,遇到冲突则回溯,直到找到所有解。 这些题目覆盖了基础算法和数据结构,如搜索、排序、图论、字符串处理、状态空间搜索等,对于提升编程技能和理解算法...

    2005年小学生夏令营活动程序设计试题

    首先,将给定的正整数N转换为10位二进制数,然后统计其中"1"的个数。如果"1"的个数为奇数,在最高位前面加1,否则加0,得到一个新的11位二进制数。再将这个11位二进制数转换为十六进制,并输出。可以先将二进制数...

    数据结构与算法课设题目一.docx

    可以使用递归或循环来实现,例如,可以将N与N-1进行异或操作,每次操作会将末尾的0变为1或反之。 6. 排序重构问题 这里有两个子问题:构造数列D和反向构造数列A。构造D可以通过两层循环,比较数组元素之间的差值来...

    ubuntu skills ubuntu命令技巧(pdf格式)

    ##### 6.12 统计当前IP连接的个数 统计当前IP连接的数量,可以使用`netstat -an | awk '/^tcp/ {print $5}' | cut -d: -f1 | sort | uniq -c`命令。 ##### 6.13 统计当前20000个IP包中大于100个IP包的IP地址 统计...

    JAVA经典算法50题

    - F(n) = F(n-1) + F(n-2) (n ≥ 3) 其中,F(n) 表示第 n 个月的兔子总数。为了求解这个问题,我们可以使用递归或循环的方式。 **代码实现**(递归方式): ```java public class Fibonacci { public static void...

    算法设计与分析历年题目答案(修改版,错了概不负责)2

    - 统计数组中相同元素的个数:文件中的算法通过减治思想,逐个比较数组元素,用O(n)的时间复杂度完成任务,优于O(n^2)的朴素方法。 动态规划相关知识点: - 文件中的动态规划问题可能是关于资源预订的问题,例如在...

    数据结构与算法课设题目一.pdf

    5. 计算1的个数问题:这是位操作的问题,可以通过位移和按位与操作来计算一个十进制数N的二进制表示中1的个数。 6. 排序重构问题:a) 构建D数组可以通过两层循环实现,比较相邻的数组元素差值。b) 重建A数组可能...

    Java经典问题算法大全

    System.out.println("\n素数的个数:" + count); ``` #### 三、水仙花数 **题目解析:** 本题目要求找出100至999之间的所有水仙花数。水仙花数是指一个三位数,它的各位数字立方和等于该数本身。例如,153就是一...

Global site tag (gtag.js) - Google Analytics