精华内容
下载资源
问答
  • 数组是1,2,3,4,5,6,7,8,9,1,0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,9,2,0,........ 求第n位是几。 我是用java实现的,解题过程中还研究了一下char转int,Integer.parseInt(String,...

    数组是1,2,3,4,5,6,7,8,9,1,0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,9,2,0,........

    求第n位是几。

    我是用java实现的,解题过程中还研究了一下char转int,Integer.parseInt(String,int)和Integer.valueOf(String)的区别。

    入手点就是找出n是个几位数以及这个数是多少。

    代码如下

    public static char getnum(String str,int n){  //str是数列,n是要求的位数
            int m = n; //对n做个备份
            char[] strings = str.toCharArray(); //将字符串按位分解
            /**
             * 1-9有9个数每个数字占1位,10-99有90个数每个数字占2位,100-999有900个数每个数字占3位,以此类推
             * 用当前位数从1-9占的位开始减,然后是10-99,100-999,从小到大以此类推,减到某一档位数小于0了,说明这位的数字属于这一档
             * (所求位数-之前各档位占用位数和)/当前档位 = 这个数-1是这一档位中的第几个数   (java向下取整,从第0个数开始,如10是第0个数)
             * (所求位数-之前各档位占用位数和)%当前档位 = 这一位是目标数字的第几位   (如果整除了说明这是这个数的最后一位,没整除就是下一个数的对应数)
             */
            for(int i=1,j=1;;i=i*10,j++){  				//i用来存放1,10,100.....即档位,j存放对应档位的数字占几位
                if((m - (9*i*j)) < 0){   				//目标位数-当前档位占用的位数<0说明目标数字在这个档位中
                    char[] num = ((i + m / j - 1)+"").toCharArray();  //把求得的数字放入数组中,方便按位取
                    int remainder = m % j;  //获得余数
                    if(remainder == 0){
                        return num[j-1];
                    }else{
                        num = ((m / j)+"").toCharArray();
                        return num[remainder-1];
                    }
                }else{  //继续减下一个档位
                    m = m - (9*i*j);
                }
            }
        }


    这里用char作为返回值是因为String转成了char[] ,返回char输出方便。

    char可以直接赋值给int,但是存放的是对应的askii码的值,而不是期望的数字。比如

    char a = '0';
    int b = a;
    
    输出结果是a:0,b:48

    char转int有2种方式,一种是int=char-48,在askii码中数字0对应48,1对应49....9对应57。

    另一种是将char转成String,可以通过+“”实现,然后再用String转成int,可以用Integer.parseInt(String,int)和Integer.valueOf(String)。

    这样就引出了Integer.parseInt(String,int)和Integer.valueOf(String)有什么区别,下面是valueOf的源码

    public static Integer valueOf(String s) throws NumberFormatException {
            return Integer.valueOf(parseInt(s, 10));
        }
    可以看出,valueOf也调用的是parseInt,只是多封装了一个Integer对象,在10进制的数上这两个方法没啥区别,用哪个都行。

    这里调用parseInt时第二个参数是固定的10,说明valueOf只解析10进制的数字字符串

    但是parseInt解析字符串的范围更广。Integer.parseInt(String,int)第一个参数是要解析的字符串,第二个参数是标明被解析字符串是几进制的。

    parseInt可以把多种进制的字符串转成10进制。

    以下是官方文档给出的例子

    * parseInt("0", 10) returns 0
    * parseInt("473", 10) returns 473
    * parseInt("+42", 10) returns 42
    * parseInt("-0", 10) returns 0
    * parseInt("-FF", 16) returns -255
    * parseInt("1100110", 2) returns 102
    * parseInt("2147483647", 10) returns 2147483647
    * parseInt("-2147483648", 10) returns -2147483648
    * parseInt("2147483648", 10) throws a NumberFormatException
    * parseInt("99", 8) throws a NumberFormatException
    * parseInt("Kona", 10) throws a NumberFormatException
    * parseInt("Kona", 27) returns 411787



    展开全文
  • 1111111
  • a[0]开始计数,每三个计数初始化一次,第三个数赋值为0(最后留下的那个不为0),每次计数最后一个元素时,令i=0,又从头开始计数。 1 #include &lt;stdio.h&gt; 2 3 int main() 4 { 5 int n; ...

    此题利用数组来解决。

    从a[0]开始计数,每三个计数初始化一次,第三个数赋值为0(最后留下的那个不为0),每次计数到最后一个元素时,令i=0,又从头开始计数。

      1 #include <stdio.h>
      2 
      3 int main()
      4 {
      5     int n;
      6     printf("please input a number:\n");
      7     scanf("%d",&n);
      8 
      9     int a[1000];
     10     int i,sum;
     11     int count = 0;
     12     sum=n;
     13     for(i=0;i<n;i++)
     14     {
     15         a[i] = i+1;
     16     }
     17     i = 0;
     18 while (sum > 1)
     19 {
     20     if(a[i]!=0)
     21     {
     22         count++;
     23     }
     24     if(count == 3)
     25     {
     26         a[i]=0;
     27         sum--;
     28         count = 0;
     29     }
     30     i++;
     31     if(i == n)
     32     {
     33         i = 0;
     34     }
     35 }
     36 
     37 for(i=0;i<n;i++)
     38 {
     39     if(a[i] != 0)
     40         printf("留下来的精英是第%d号\n",i+1);
     41 }
     42 
     43     return 0;
     44 }
    

     

    展开全文
  • 第一个人开始报13报), 凡报到3的人退出圈子,问最后留下的原来第号的那位。 分析: 将每人编上坐标,并且给每人定下最开始的下标,等只剩下最后一人的时候,用他的坐标去找相应人的...

    有10个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),

    凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

     

    分析:

    将每个人编上坐标,并且给每个人定下最开始的下标,等只剩下最后一个人的时候,用他的坐标去找相应人的编号

    下标        0 1 2 3 4 5 6 7 8 9
    编号        1 2 3 4 5 6 7 8 9 10
    第一次  1   1 2 - 1 2 - 1 2 - 1
    第二次  2   2 -   1 2   - 1   2
    第三次  3   -     1 2     -   1
    第四次  4         2 -         1
    第五次  5         2           -
     

     

     

    
    public class CallNumber {
        public static void main(String[] args) {
    
            int value = callSurvivalNumber(1);
            System.out.println(value);
        }
    
        
        public static int callSurvivalNumber(int count) {
            if (count <= 0) {
                throw new IllegalArgumentException("Count must >0");
            }
            boolean[] status = new boolean[count];
            for (int i = 0; i < status.length; i++) {
                status[i] = true;
            }
            int index = -1;
            int counter = 0; //当前退出的人数 n-1
            int current = 0; //当前人报的数
            while (counter < status.length - 1) {
                //index 成环
                index = (index + 1) % status.length;//0
                if (!status[index]) {
                    continue;
                }
                //报数
                current = (current + 1) % 3;   //1
                //退出
                if (current == 0) {
                    counter++;
                    status[index] = false;
                }
            }
            for (int i = 0; i < status.length; i++) {
                if (status[i]) {
                    return i + 1;//1-n 0-(n-1)
                }
            }
            throw new RuntimeException("Not found");
        }
    }
    

     

    展开全文
  • 输入数字 n,按顺序打印出 1 最大的 n 位十进制。比如输入 3,则打印出 1、2、3 一直最大的 3 位数 999。 示例 1: 输入: n = 1 输出: [1,2,3,4,5,6,7,8,9] class Solution { //先定义几个需要用到的全局...

    打印从1到最大的n位数

    输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。

    示例 1:

    输入: n = 1
    输出: [1,2,3,4,5,6,7,8,9]

    class Solution {
        //先定义几个需要用到的全局变量
        //初始化结果数组res
        int[] res; //Math.pow返回的是double
        char[] nums;
        char[] loop = {'0','1','2','3','4','5','6','7','8','9'}; 
        int count=0;//数组计数索引
        int x = 0; //x表示递归到第几层
        public int[] printNumbers(int n) {
            nums = new char[n];
            res = new int[(int)Math.pow(10,n)-1]; //Math.pow返回的是double
            dfs(x,n);
            return res;
        }
    
        public void dfs(int x,int n){  //x表示递归到第几层
            //递归终止条件,x==n,此时要要结果数组res中添加数字
            if(x==n){
                String str = String.valueOf(nums);//把字符数组转换为字符串
                int temp =  Integer.valueOf(str); //把字符串转换为整数
                if(temp!=0){  //跳过0          
                    res[count] = temp ;//把字符串转换为整数后添加到结果数组中
                    count++; //计数索引加1
                    return; 
                }
                return;
            }
    
            for(char ch:loop){ //对第x层的数字进行固定,然后继续向下一层递归
                nums[x] = ch;
                dfs(x+1,n);
            }
        }
    }
    
    
    展开全文
  • #include<iostream> using namespace std; int main() { int a[15]={15,14,13,12,11,10,9,8,7,6,5,4...//这题是从小!!!!!!! int l=0,h=14,x,m; cout<<"输入查找的:"; cin>>x; ...
  • 代码 int main() { int sum=0,n,m; scanf("%d%d"...当一个数除a以另一个数b 除了a中...还包含了a中 有几个数可以被b整除 如 9 和3 1 2 3 4 5 6 7 8 9 9/3=3 1 2 3 4 5 6 7 8 9 则黑体全除...
  • 数学一门工具性学科,其他学科学习的基础,只有学好数学才能在其他各个学科上形成重大突破。小生活点滴,大现代信息革命,每一处都离不开数学的重要作用,一切科学...一、与代数1、自然数包括正整数和0,...
  • 输入数据有多组, 每组的第一行2整数 n, m(0 , m ) 表示校园内共有n点, 为了方便起见, 点从0到n-1编号,接着有m行, 每行有两整数 s, t (0,t) 表示从s点能到t点, 注意图有向的.接着的一行整数T,表示有T...
  • 这个问题其实一个排列组合的问题,设这个数为sum=a1a2a3a4a5a6a7a8,a1-a8表示这个数的某位的数值,当一个数的最后一位为奇数时,那么这个数一定为奇数,不管前面什么数字。如果最后一位数为偶数,则这个数...
  • 这个问题其实一个排列组合的问题,设这个数为sum=a1a2a3a4a5a6a7a8,a1-a8表示这个数的某位的数值,当一个数的最后一位为奇数时,那么这个数一定为奇数,不管前面什么数字。如果最后一位数为偶数,则这个数...
  • 附加: 第一 while 循环跑的过程k = 1 [1,2,3,4,5,6,7,8,9,10] num[0] = 1 k +=1 i += 1 ==> k = 1 i = 1 m = 0k = 2 [1,2,3,4,5,6,7,8,9,10] num[1] = 2 k +=1 i += 1 ==> k = 2 i ...
  • 这个问题其实一个排列组合的问题,设这个数为sun=a1a2a3a4a5a6a7a8,a1-a8表示这个数的某位的数值, 当一个数的最后一位为奇数时,那么这个数一定为奇数,不管前面什么数字。如果最后一位数为偶数, 则这...
  • 算法思想:这个问题其实一个排列组合的问题,设这个数为sun=a1a2a3a4a5a6a7a8,a1-a8表示这个数的某位的数值,当一个数的最后一位为奇数时,那么这个数一定为奇数,不管前面什么数字。如果最后一位数为偶数,...
  • 以下图为例, 箭头从1开始循环数数, 具体数到几自己规定, 下图为例从1数到3, 然后3淘汰, 将箭头指向被淘汰的下一, 然后继续, 淘汰6, 以此类推… 上图淘汰顺序为: 3 6 1 5 2 8 4 7 二、从0手写一单向循环...
  • Happy num所想到的几个问题

    千次阅读 2015-10-11 12:29:27
    首先,前天在leetcode上刷了一题,做的时候边发现这难度为easy的题目实际上非常有意思的。先把题目放上来: 【题目翻译】我们把满足如下性质的自然数nn称为快乐:以19为例,若12+92=81→82+12=68→62+...
  • 连乘积的末尾有几个0? 答案两个0。其中,因数10得到1个0因数2和5相乘又得到1个0,共计两个。 刚好两个0?会不会再多几个呢? 如果不相信,可以把乘积计算出来,结果得到 原式=3628800。你看,乘积...
  • 首先每组中三个数从小大进行排序ÿ0c;组与组之间首先比较第一个数ÿ0c;小的在前ÿ0c;若第一个数相同ÿ0c;则比较第二个数ÿ0c;小的在前。” 明明在比赛中对这道题目想了很久ÿ0c;最终还是成功地...
  • :从小大的顺序01234567891011121314151617181920倒数:小的顺序20191817······单数:1、3、5、7、9······双数:2、4、6、8、10······(注:0既不是单数,也不是双数,0是偶数。...
  • (1) 一个整数数列,元素取值可能是0~65535中的任意一个数,相同数值不会重复出现。0是例外,可以反复出现。 请设计一个算法,当你该数列中随意选取5个数值,判断这5个数值是否连续相邻。 注意: - 5个数值允许...
  • 思路:所求和为一数字的前n项和,例如前4项和就是4+44+444+4444,一直加第4位,为44。所以可以用一循环来表示每一项的数字,加项就循环次。然后将每项进行相加就可以求出总和。 1 #include<...
  • 为了证明这一点,让我们先来看一个更简单的问题:任取两个 0 1 之间的实数,它们的和小于 1 ...类似地,三个数之和小于 1 的概率则 1/6 ,它平面 x+y+z=1 在单位立方体中截得的一个三棱锥。这个 1/6 可以利用...
  • 拿出几个和其他编程语言不一样的数据结构讲讲 列表(也就是数组) 序列Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引1,依此类推。 Python有6个序列...
  • 总的算法口诀:、二十几到九十的同一十位均可按被乘数加乘数的位数之和,乘十、二十等的十位如10、20……90等,再加上俩乘数的位数的相乘积,即得两乘数之积。 十的算法:如11X17=? (被...
  •  跳数是网络路由中的术语,表示消息一个路由器传送另一个路由器要经过几个节点的转发,就称为几跳。那么有一个问题就是,当需要找到转发次数最短的路径时,就会涉及到从一个节点另一个节点之间最短跳问题。...
  • <p>2018年6月21日Google发布Flutter首release预览版,作为Google baba大力推出的一种全新的响应式ÿ0c;跨平台ÿ0c;高性能的移动开发框架ÿ0c;势必会火一波~没别的ÿ0c;就是因为Google babaÿ0c;当然...
  • 我们只需要验证其中的几个关键ÿ0c;就可以不必再重复验证余下的数字。你的任务就是找出这些关键数字ÿ0c;并按小的顺序输出它们。 输入格式: 每个测试输入包含 1 个测试用例ÿ0c;第 1 行给...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 877
精华内容 350
关键字:

从0到6是几个数