精华内容
下载资源
问答
  • 先设:按照次序这四个数字为a(千位)、b(百位)、c(十位)、d(个位)两式大小为这个四位数大小为1000a+100b+10c+d(记作1式)将次序反过来写大小变为1000d+100c+10b+a(记作2式)求出a、d然后用1式-2式=1000(a-d)+...

    有一个奇特的四位数,组成它的所有数字(1-9)都不相同且没有0,如果把此数的4个数字的次序反过来写,则所得的数比原数少8532,求这个四位数?

    da5b9edc08ea254ae2aa3b769e3f341d.png

    先设:按照次序这四个数字为a(千位)、b(百位)、c(十位)、d(个位)

    4cf7b870d675e7829d15e276c1191924.png

    两式大小为

    这个四位数的大小为1000a+100b+10c+d(记作1式)

    将次序反过来写大小变为1000d+100c+10b+a(记作2式)

    c363c4e8fd3d203e026d969c0e47a8e3.png

    求出a、d

    然后用1式-2式=1000(a-d)+100(b-c)+10(c-b)+(d-a)=8532

    因为a≤9,d≥1,且两式之差结果千位为8(8532)

    因此只有a取最大,d取最小,两式之差结果千位才能为8(不存在借位,借位的话之差会小于8)

    所以只能是a=9,d=1

    826b38e9da9a92c61aa08539535ee928.png

    求出b、c

    然后就有:8000+100(b-c)+10(c-b) -8=8532

    整理化简:90b-90c=540

    即b-c=6,那么b和c分别对应多少时,之差为6呢

    有三组,分别是:

    9-3(舍去,a已经等于9了)

    8-2(成立)

    7-1(舍去,d已经等于1了)

    因此只能是b=8,c=2

    c70d809a81bec096046513ba3a15fede.png

    最终结果

    综上:a=9,b=8,c=2,d=1,即这个四位数为9821


    点击参考视频

    #数字推理##逻辑推理##数学#

    展开全文
  • 移掉K位数字

    2020-12-02 16:02:01
    1)数字的大小是由高位(百位相对于个位为高位)决定的,所以我们考虑从左到右扫描删除num中的数字; (2)当我们删除num中的某一位时,下一位将会代替该位,而要使得最后的数值最小,那么删除位应当具有以下...

    leetcode 402题 [medium]
    中:移掉K位数字
    英:Remove K Digits
    在这里插入图片描述

    题解

    1. 算法思路
      (1)数字的大小是由高位(百位相对于十、个位为高位)决定的,所以我们考虑从左到右扫描删除num中的数字;
      (2)当我们删除num中的某一位时,下一位将会代替该位,而要使得最后的数值最小,那么删除位应当具有以下特征:替换位要比删除位

    2. 算法步骤
      (1)从左到右扫描每一位数字,若当前数字比前一数字,则删除前一数字;删除后,当前数字继续与前一数字比较,直到当前数字比前一数字大或者前一数字不存在,则继续扫描下一位。(删除个数满足k则停止
      (2)若num扫描完毕,k仍不为0,则从当前数尾部开始删除数字。(因为此时数满足从左到右每一位单调递增,尾部为最大数字

    3. 核心数据结构:单调递减栈

    4. 时间复杂度:O(n) 遍历一遍num

    5. 空间复杂度:O(n) 单调栈空间

    6. 实现

      /**
       * @param {string} num
       * @param {number} k
       * @return {string}
       */
      var removeKdigits = function(num, k) {
          /**
           * 单调递减栈
           * 时间复杂度:O(n)
           * 空间复杂度:O(n)
           */
          // 预处理(无)
      	
      	// 单调递减栈(栈顶为栈内最大元素)
          let stack = [num[0]];
          let stackTopIdx = 0;
          let i = 1, numLen = num.length;
          // 遍历num
          while(i < numLen && k > 0){
          	// num[i]入栈
              while(num[i] < stack[stackTopIdx]/* 比较会自动进行类型转换 */){
              	// 出栈元素即为需要被删除的元素
                  stack.pop();
                  stackTopIdx--;
                  if(--k === 0) break;	// k === 0 删除结束
              }
              stack.push(num[i++]);
              stackTopIdx++;
          }
          while(k--) stack.pop();
          
          // 构建结果
          let result = stack.join('') + num.slice(i);
          let notZeroHeadIdx = 0;
          while(result[notZeroHeadIdx] === '0') notZeroHeadIdx++;
          return result.slice(notZeroHeadIdx) || "0";
      };
      
    展开全文
  • 阿拉伯数字的句法结构主要在单位顺序和几十年方面不同于... 对于需要处理数字句法结构的数字而言,这种错误比十进制数字或11到19的数字更为常见,后者需要较少关注数字语法。 尽管阿拉伯语计数系统具有倒转功能,但
  • 题目:输入数字n,按顺序打印出从1到最大n位十进制。比如输入3,则打印出1、2、3一直到最大3位数即999。 题目乍一看很简单,看到这问题时候,最容易想到方法就是先求出最大n位数,然后一循环开始...

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

    题目乍一看很简单,看到这个问题的时候,最容易想到的方法就是先求出最大的n位数,然后一个循环开始打印。

    这样想是没错的,可是如果我们求的最大的n位数很大呢?如果比longlong还要大很多该怎么办呢?
    很显然上面的想法在大数问题下已经行不通了。

    我们可以换一种思路:在字符串上模拟数字加法,之后打印字符串即可。

    #include <bits/stdc++.h>
    
    using namespace std;
    
    bool inc(char* num, int n)//模拟加法
    {
    	int i = 0, m = 0, take = 0;//进位
    	for (i = n - 1;i >= 0;i--)
    	{
    		m = num[i] - '0' + take;
    		take = 0;//进位置0
    		if (i == n - 1) m++;//从末尾加
    		if (m >= 10)//产生进位
    		{
    			if (i == 0)return 0;//若最高为溢出,终止
    			else
    			{
    				take = 1;
    				num[i] = m - 10 + '0';//进位后,将本位置0
    			}
    		}
    		else num[i] = m + '0';//不产生溢出时,在本位上加
    	}
    	return true;
    }
    void print(char* num, int n)
    {
    	int i = 0;
    	for (i = 0;i < n;i++)if (num[i] != '0')break;
    	printf("%s ", num + i);
    }
    int main(void)
    {
    	int n = 4;//4位数
    	char* str = new char[n + 1];//字符串的最后一位为‘\0’,多开辟一个空间
    	memset(str, '0', n);//初始化
    	str[n] = '\0';
    	while (inc(str, n))print(str, n);
    	delete[] str;//释放空间
    	str = NULL;
    }
    

    注意内存泄漏。

    展开全文
  • 32系统sizeof(int)=4,也就是有32二进制,内存中是以32二进制补码形式存放这个数的,int为有符号,最前面一个数字是符号,0表示正数,1表示负数。 也就是31存储这个数的大小。 正数补码就是他...

    应该也是我们班的,比我学的好多了啊!!!

     

    32位系统sizeof(int)=4,也就是有32位二进制数,内存中是以32位二进制补码的形式存放这个数的,int为有符号数,最前面一个数字是符号位,0表示正数,1表示负数。

    也就是31位存储这个数的大小。

    正数的补码就是他的原码本身,也就是num%2  ,余数倒叙排列,不够32位的前面补0,

    例如,

    00000000 00000000 00000000 00000001   表示1,

    00000000 00000000 00000011 00000000   表示的是2的9次方+2的8次方=768。

    最大int 

    01111111 11111111 11111111 11111111   表示2的31次方-1=2147483647

    负数的补码是他对应正数的原码的反码,再+1得到的。

    如-1,对应的1的原码 

    00000000 00000000 00000000 00000001

    1的反码    

    11111111 11111111 11111111 11111110

    反码加1为           

    11111111 11111111 11111111 11111111   这也就是内存中-1的存储方式。

    int表示的最大正整数2147483647对应的负数-2147483647的二进制为

    2147483647原码        

    01111111 11111111 11111111 11111111

     反码    

    10000000 00000000 00000000 00000000

    反码+1       

    10000000 00000000 00000000 00000001

    那么int表示的最小的负数也就是 

    10000000 00000000 00000000 00000000  也就是 -2147483648

    知道原理了如何打印一个数的32位二进制码呢?

    1,先用原始的取余倒序排列,设要打印的数位num,

    对于正数,num%2的值也就是第32位,(num/2)%2取余也就是第31位,((num/2)/2)%2也就是第30位……

    定义一个有32个元素的数组a[32]来存放余数,用一个for循环来将余数赋给数组,

    for (i=0;i<32;i++ )

    {

    a[i]=num%2;

    num/=2;

    }

    a[0]存放第32位,a[1]存放第31位 ,  a[2]存放第30位……   打印只要用下面语句倒序打印数组a,就可以了。a[31]a[30].......a[1]a[0]

    for (j=31;j>=0;j--)

    printf ( "%d",a[j] );

    对于负数,他的存储方式也可以看做是,对应正数减去1之后的反码,如-1对应的正数1 减去1也就是0,

    0的原码 

    00000000 00000000 00000000 00000000

       反码    

    11111111 11111111 11111111 11111111  也就是-1的存储方式

    if(num<0)

    {

    num = -num-1;

    for (i=31;i>=0;i-- )

    {

    a[i]=num%2;

    num/=2;

    }

    }

    这里我改变了一下赋值顺序,先将正整数第32位赋给a[31]……也就是a[0]存放第一位,打印的时候顺序打印数组就可以了(对于正数)。我们最终是要打印负数的二进制表示,所以还要取反,可以用下面的语句。

    for (j=0;j<32;j++)

    b[i] = (a[i]+1)%2;

    那么,顺序打印数组b就可以了。

    以下是这种方法的实验图:




    2 用位操作打印。

    用位的左移右移,我们可以将其他位都置0,

    如  10100000 00001100 00000000 00000000我们左移2位再右移31位,就可以直接得到

          00000000 00000000 00000000 00000001       也就是上面的第2个1移到了最后一位,可以得到第30位的值

    每一位都如此操作,我们就可以得到每一位的值0或1,依次打印即可。

     但是对于一个有符号的数,位的操作会使符号一起移动,但是如果符号位为1,你右移之后,符号位会自动补1,

    如10000000 00001111 11110000 00001111  ,我们为了得到第1位的1,直接右移31位,我们预想的结果是

        00000000 00000000 00000000 00000001 ,但实际上,由于符号位为1,每次右移符号位都会自动补1,右移1位

        11000000 00000000 00000000 00000000,右移31位之后会变成

        11111111 11111111 11111111 11111111。

    为了得到想要的结果,我们可以把int赋值给一个unsigned int,这样,就可以用这个方法了。



    可以看到,我用了3种位操作的方法来打印,第3种是我上面讲的,

    第2种也是转换为无符号数,进行了一次位操作;

    第1种是在不转换为无符号数的情况下,进行位操作打印。结果都是正确的。


    展开全文
  • 例如:当Q0~Q3输出个位的BCD码时,DS1端输出低电平;当Q0~Q3输出十位的BCD码时,DS2端输出低电平;当Q0~Q3输出百位BCD码时,DS3端输出低电平时,周而复始、循环不止。 图3-5 CD4553芯片引脚图 表3-1 CD4553...
  • 题目 输入数字n,按顺序打印出从1到最大的n...如果在所有的数字前面补0的话,就会发现n所有的进制其实就是n从0到9的全排列。也就是说,我们把数字的每一都从0到9排列一遍,就得到了所有的进制。在打...
  • LeetCode第一题,比较简单,这里就不多说了,LeetCode上解答和代码都比较完善http://leetcode.com/2012/01/palindrome-number.html 读...首是2,所以如果是一20亿多的数,末位2大的话,一倒置就溢出了简单写...
  • 问题四九:将1-9分为1:2:3的三位数 /* 问题四七:构造N*N的拉丁方阵,使方阵的每一行和每一列中数字1到N只出现一次 分析:题目为构成此类方阵的标准型,即行列的数字顺序相同 问题四...
  • 目前通过实验发现超过16且最后一1的整数在字符串/数字相互转换的时候会出现问题,并且出现问题的直接原因是定义之后这些数字原值多1,但这范围并没有超出js能够表示的最大范围 一下几个数大家可以试一下...
  • 给定区间,求转化为二进制后其中0比1多或相等的数字的个数。 思路 将数字转化为二进制进行数位dp,因为一二进制的最高必须为1,所以设置变量first记录前面是否有1,若有1,则可任意放,否则,只可放1。 ...
  • C++之数字计数算法

    千次阅读 2018-07-29 21:33:28
    个:个位为0时,后面不需要考虑,只需考虑前面,因为04小,所以前面即使取到最大也不会过限,所以前面可以是1~203(因为当前位是0,所以前面不能是0)。一共203种。  十:十位为0时,前面取1~20,后面取0~9。一共...
  • 猜数字游戏规则: 1. 电脑随机产生100—999之间的数字(包括100、999); 提示:用rand函数,该函数在stdlib.h库中,并保证多次运行产生...7. 两数,其中一十位数? ——当前分数减20 8. 数之和 ——当前分数减33
  • POJ 3286 How many 0's?(数位dp)

    千次阅读 2016-02-29 22:58:34
    题目链接:POJ 3286 ... 个:个位为0时,后面不需要考虑,只需考虑前面,因为04小,所以前面即使取到最大也不会过限,所以前面可以是1~203(因为当前位是0,所以前面不能是0)。一共203种。 十:十位为0时,前面取1
  • 今天分享一下课上袁伟胜老师换算技巧,与大学计算机课上换算方法略显简便——看图说话法= =!看下面8个数字:128 ,64 ,32 ,16 ,8 ,4 ,2 ,1例:将二...1 2 0 8 16 32 0 128=187总结:将二进制数字个位...
  • //基于STC12C4052AD单片机0-99V数字电压表程序 //ID:abenyao数码之家首发。 //ID:wh307 优化显示,哈哈哈~ //P1.6口为0-5V模拟量输入端,P1.5口连接TL431l输出2.5V基准电源,4串行LED数码管显示 //**********...
  • "二进制加法

    2014-01-12 00:11:43
    题目: 在二进制中,我们除了使用数字0-9以外,还使用字母a-j(表示10-19),给定两进制整数,求它们的和。...a、b长度可能不同,用一长度a、b中长度最大值大1的字符串sum存储结果;
  • 若一个三位数的十位数字比个位数字和百位数字,称这个数为“伞数”. 现从1,2,3,4,5,6…N,这N个数字中取3个数,组成无重复数字的位数, 问其中有多少个伞数 Input 一行,给出数字N,N<=9 Output 如题 Sample...
  • 比如说我们所熟悉的十进制,通俗说是由0,1,2,3,4,5,6,7,8,9这十个数字组成,如果9再个数,就会进一,高位加一,低位重置,也就是10。 再比如八进制,是由0,1,2,3,4,5,6,7这八个数组成,逢八进一,...
  • 第二章 数据分析 知识点题型归纳 实验中学 马贵荣 PAGE PAGE 1 一知识点讲解 1.平均数 1算术平均数一组数据中有n数据则它们算术平均数为 ....中位数将一组数据按照由小到或由到小顺序排列如果数据
  • 小蓝制作门牌方法是先制作 0 到 9 这几个数字字符,最后根据需要将字 符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、 0、 1、 7,即需要 1 字符 0, 2 字符 11 字符 7。 请问要制作所有 1 到 ...
  • 水仙花数的vfp实现

    2009-08-08 00:19:47
    b=int((i-100*a)/10) &&用这个三位数减去它百位数字与100乘积, &&对得到差除以10后进行取整,结果就是十位的值 c=i-int(i/10)*10 &&与上面原理相同,这是求个位的值 if i=a^3+b^3+c^3 &&成立说明是水仙花数...
  • 我们应该让低位尽可能变一点就好不改变个位以上的数字个位及以下能否变?不能不改变十位以上的数字十位及以下能否变?不能不改变百位以上的数字,百位及以下能否变?6以下有6大的数字,故可以变找到...
  • 例题一个三位数各位数字之和是17,其中十位数字比个位数字大1.如果把这个三位数百位数字与个位数字对调,得到一个新三位数,则新位数比原三位数大198,求原来三位数是多少?思路点拨本题所需要知道公式...
  • 第一次参加蓝桥,省一中下游。刚完时感觉还行,填空题都会写,编程题前两题也...小蓝制作门牌方法是先制作 0 到 9 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、0、1、7,
  • PAGE PAGE 1 进制数 JAVA用进制但底层用是二进制 十六进制 十六进制一位数代表二进制四位数 关系运算 关系运算算数运算优先级低但赋值运算高 判断是否相等==和=优先级低 6>5>4这句话是错6>5是true而...
  • 我们应该让低位尽可能变一点就好不改变个位以上的数字个位及以下能否变?不能不改变十位以上的数字十位及以下能否变?不能不改变百位以上的数字,百位及以下能否变?6以下有6大的数字,故可以变找到...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 189
精华内容 75
关键字:

十位数比个位大1的数字