有趣的数字_用有趣的图案代表数字 - CSDN
精华内容
参与话题
  • 罗马数字与阿拉伯数字的相互转换

    千次阅读 2018-05-02 09:27:22
      最近遇到一道非常有趣的题目,题目大意如下:有一个富翁在银河系里做生意,而银河系使用的是罗马数字,所以他需要一个精明能干的助手,帮助他完成罗马数字与阿拉伯数字的相互转换,题目在这个背景下衍生出交易...

      最近遇到一道非常有趣的题目,题目大意如下:有一个富翁在银河系里做生意,而银河系使用的是罗马数字,所以他需要一个精明能干的助手,帮助他完成罗马数字与阿拉伯数字的相互转换,题目在这个背景下衍生出交易场景,我们需要帮助他计算出相关商品的价格。对于这道题目,如果剥离开这个题目本身的交易场景,这道题目本质上就是一个纯粹的算法问题。说来惭愧,博主当时并未能快速地解决这个问题,事后通过研读别人的文章始能有所领悟。所以,今天想在这篇文章里,同大家一起来讨论下这个问题。今天,全世界都在使用0到9这10个阿拉伯数字,比阿拉伯数字早2000年的罗马数字。为什么没有流传下来为后世所用呢?我觉得这是一个非常有意思的问题,数学同计算机学科间那种千丝万缕的联系、技术演进过程中若有若无的某种必然性……这些都是令我觉得非常有意思的地方。那么,一起来看看这个问题可好?

    罗马数字起源

      罗马数字,顾名思义,就是古罗马人使用的数字系统。在罗马数字中,共有7个基本数字,即I、V、X、L、C、D、M,它们分别表示1、5、10、50、100、500、1000。可以注意到,在这套数字系统中,0不被视作是一个整数。据说,曾经有一位罗马学者不顾教皇的反对,执意将与0相关的知识以及0在运算中的作用向民众传播,因此被教皇囚禁并投入监狱,理由是0是一个邪物,破坏了神圣的数。同样罗马数字无法表示小数(注:罗马数字有分数的表示方法,可仅仅能表示1/12的整数倍),因此罗马数字常常用来表示纪年,在欧洲国家的古书籍、建筑和钟表中,我们都可以见到罗马数字的身影。我们熟悉的元素周期表,同样采用了罗马数字来表示元素所在的”族”。需要说明的是,罗马数字是一种计数规则,而非计算规则,这意味者罗马数字是没有进位和权重的概念的,所以一般罗马数字只用以计数而不用以演算。

      既然罗马数字是一种计数规则,那么我们就不得不说一说它的组合规则,因为4000以内的数字,都可以用这7个基本数字组合表示。具体来讲,罗马数字的基本规则有以下4条:
    * 重复次数:一个数字重复多少次,所表示的数字就是这个罗马数字的多少倍;一个罗马数字最多重复三次。这条规则该怎么理解呢?第一点,I、II、III分别表示1、2、3;第二点,4必须被表示为IV,而不是IIII。关于4的表示方法,在历史上一直存在争议,一种观点认为IIII这种写法占用书写空间,IV可以达到简化书写的作用;而一种观点则认为IV有亵渎神灵朱庇特、含不敬侮辱之意。
    * 左减原则:当一个较小的数字被放在一个较大数字的左边时,所表示的数字等于这个大数减去这个小数,且左边最多只能放一个较小的数字。联系第一条原则,IV表示的实际上是V-I,所以这个数值表示4;同理,9为了满足第一条原则,必须被表示成IX。
    * 右加原则:当一个较小的数字被放在一个较大数字的右边时,所表示的数字等于这个大数加上这个小数,且右边最多只能放一个较小的数字。这一条原则和第二条原则相对应,例如11会被表示成XI、21会被表示为XXI,以此类推。
    * 搭配原则:I只能被放在V和X的左边;X只能被放在L和C的左边;C只能被放在D和M的左边;V、L、D不能被放在左边。这一条可以看作对是第二条的总结,所以没有什么可说的。

      好了,通过这个这些规则我们就可以组合出不同的数字,我们可以注意到这些数字呈现出1、4、5、9的规律。什么是1、4、5、9的规律呢?我们可以注意到4和9是两个特殊的数字,4必须通过5左减来得到,9必须通过10左减来得到,这是因为罗马数字要满足最多重复三次的原则,而4和9相对1和5的偏移量恰好是4,所以它们的表示方法和其他数字不同。因为罗马数字没有进位和权重的概念,所以除了左减和右增这两种特殊情况以外,它的基本数字应该从左至右依次递减,即使在左减的情况下,左边的数字应该和右边的数字处在同一序列。这句话怎么理解呢?例如,90必须用100-10来表示;而99必须拆解为90和9,然后分别用100-10和10-1来表示,唯独不能通过100-1来表示,因为100和1分属两个不同的序列。

    数字转换实现

      了解完罗马数字的历史渊源,我们就对罗马数字有了一定的了解。现在来考虑一个问题,即罗马数字和阿拉伯数字间的相互转换。罗马数字的确是古罗马人发明的,可阿拉伯数字实际上却是古印度人发明的。今天全世界人都在使用阿拉伯数字,因此这两者间需要一个转换器,这正是我们一开始所讨论的问题:假如银河系里的人们都使用罗马数字来计数,当一个地球上的富翁来到银河系以后,他要如何去和这里的人们进行交易。显然,这种转换应该是双向的,我们下面分别来看如何实现相应的转换。

    阿拉伯转罗马

      首先来考虑阿拉伯数字转罗马数字,因为一个罗马数字必然是从左到右依次递减,所以我们只需要将这7个基本数字从大到小排列,找到第一个不小于指定数字的数位即可。例如1024显然超过了1000,而罗马数字中的1000对应M,因此1024的第一位应该是M。接下来24,显然超过10,因此1024的第二位数字应该是X。接下来14,显然超过10,因此1024的第三位数字同样是X。接下来4,这是一个特殊的数字,需要被表示为IV,这是1024的第四位数字。我们将整个过程串联起来,就可以得到1024的罗马数字形式MXXIV。我们注意的一点是,这里需要4和9这两个数字作为辅助数字,因为1到3、6到8的数字,我们总可以通过不断地重复1来得到,就像辗转相除法一样。如果没有这两个辅助数字会怎样呢?4会变成IIII,而9会变成VIIII,显然这是不符合我们预期的。整理下我们的思路,这段代码实现如下:

    public static string ConvertToRoman(int number)
    {
        var output = new StringBuilder();
        var digitMap = new Dictionary<int,string>()
        {
          {1,"I"},{4,"IV"},{5,"V"},{9,"IX"},
          {10,"X"},{40,"XL"},{50,"L"},{90,"XC"},
          {100,"C"},{400,"CD"},{500,"D"},{900,"CM"},
          {1000,"M"}
        };
        var digits = digitMap.OrderByDescending(e => e.Key).ToList();
    
        for (int i = 0; i < digits.Count && number > 0; i++)
        {
            if (number < digits[i].Key) continue;
            while (number >= digits[i].Key)
            {
                number -= digits[i].Key;
                output.Append(digits[i].Value);
            }
        }
    
        return output.ToString();
    }

    罗马转阿拉伯

      接下来考虑罗马数字如何转换为阿拉伯数字,我们可以明确的一点是,罗马数字基本上是从左到右依次递减排列的,每一个数字的左侧和右侧出现的数字一定处于当前数字的同一序列。比如,I只能被放在V和X的左边;X只能被放在L和C的左边;C只能被放在D和M的左边。因此,我们从左到右依次遍历整个字符串,将每个字符转化为对应的阿拉伯数字然后累加即可,需要注意的是,当当前元素小于下一元素时,表示当前元素为负数;当当前元素大于下一元素时,表示当前元素为正数。显然,这里最后一位应该是正数,因为它没有下一个元素可以比较。至此,我们梳理出整个思路:从第一位到第n-1位依次循环,判断当前元素的正负然后累加,再加上最后一位元素的值即可。下面是代码实现:

    public static int ConvertToNumber(string romanNumber)
    {
        var number = 0;
        var length = romanNumber.Length;
        var digits = new Dictionary<string,int>()
        {
          {"I",1},{"V",5},{"X",10},{"L",50},{"C",100},{"D",500},{"M",1000}
        };
    
        for (int i = 0; i < length - 1; i++)
        {
            //前面 n-1 位数字通过左右比较决定正负 & 第 n 位数字必然为正
            if ((digits[romanNumber[i].ToString()] >= digits[romanNumber[i + 1].ToString()]) || i + 1 >= length)
            {
                number += digits[romanNumber[i].ToString()];
            }
            else
            {
                number -= digits[romanNumber[i].ToString()];
            }
        }
        return number;
    }

    为什么会溢出

      相信上面这两段代码,大家都已然把玩过了。可我们仔细想想,就会觉得这事儿不靠谱。前段时间网络上一直流传着,我们这些佛系青年正在被同龄人抛弃。这个题目里我们所面对的,可是一个来自地球的的富翁啊!富翁的钱不都是按亿来计数的吗?我们没有一个亿这样的小目标,我们的目标是月入5万啊,这是一个社会上流行的说法。好了,回到这个题目中来,如果我们输入50000这个阿拉伯数字,它会输出什么呢?答案是50个M,这很罗马数字啊,当然更神奇的事情是什么呢?当我们尝试把这由50个M组成的罗马数字转换为阿拉伯数字时,会发现它不能像我们期望地输出50000,而会变成是一个负数。为什么这里是负数呢?答案是溢出啦!

      过去,我们常常听到”溢出“这个词儿,最常见的是数据溢出。为什么会发生数据溢出呢?因为我们定义的数据超过了计算机所使用的数据的表示范围。这一点我们可能无法理解,一个相对粗浅的认识是,现代计算机的内存已经大到非常客观,甚至我们的硬盘都已经使用TB这样的容量单位,为什么还是会发生数据溢出呢?回到罗马数字这个问题,我们发现一个残酷的事实是,古罗马人并没有定义1000以上的数字表示,这或许和古罗马人发明数字的过程有关。古人最早都是使用手指、绳结、竹筹这样的工具来计数,在人们没有接触到相当大的数字以前,人们认为这些数的表示是足够的。同样的,我们的计算机经历了从8位、16位、32位到64位的发展。所以,这个世界上没有任何东西是一成不变的,一个技术方案势必要随着业务演化而扩展。

      我们前面曾提到,这7个基本数字可以表示4000以内的数字,为什么是4000以内呢?因为根据罗马数字最多重复三次的规则,我们应该用5000-1000来表示4000,可问题是这7个基本数字中并没有5000的定义,这和计算机中的数据溢出是非常相似的,因为我们都无法通过现有的构造去描述一个新的东西。这和数学上的那些”扩充“有着极其相似的地方,当我们意识到所有的数不都是整数的时候,我们引入了分数/小数;当我们意识到所有的数不都是有理数的时候,我们引入了无理数; 当我们意识到所有的数不都是实数的时候,我们引入了虚数。在数学上,这叫做数的扩充;在计算机里,这叫做数据溢出。数学作为一本学科,可以通过完善理论来自圆其说;而编程语言里数据结构,是在一开始就定义好的一套规范,它无法更不应该经常去修改,关于如何去解决程序中数据溢出的问题,这已然是一个新的问题了,不过我们可以看看古罗马人是怎么做的。

      聪明的罗马人自然想到了这个问题,他们提出的解决方案是这样的:在一个数字的上面加一条横线,表示这个数增值1000倍。所以,按照这个定义,4000应该由IV变化而来,9000应该由10000变化而来,而10000则可以看作是10的1000倍,即10000应该由X变化而来。我们在最初的规则中为什么没有说这一条呢?因为在数字上面增加一条横线,这更接近一个书写的行为,它增加了我们程序解析的难度,当一个数字的上面出现横线以后,我们就不能再按照原来的方式去转换。所以,考虑这个因素,实际上还是为了简化问题本身,这道题目中同样回避了这个问题。罗马人这个想法的确很好,可以解决眼下我们所面临的问题,可时间久了以后,罗马人发现这套计数规则书写了繁琐复杂,因而这套规则渐渐地就被人们放弃了。在2015年意大利官方宣布,国内街道编码、文件编码等全部废弃原有的罗马数字,改为使用阿拉伯数字。

    选择阿拉伯数字

      历史最终选择了阿拉伯数字,而不是罗马数字,这并不是一个巧合,尽管罗马数字要比阿拉伯数字早2000年。罗马数字的缺陷不仅仅在于其书写的繁杂,一个更重要的原因是,它不能更好地推动数学学科的发展。罗马人发明罗马数字的目的是为了计数,可一旦产生了数,就势必会产生计算。可我们发现罗马数字并不适合计算,因为它对数字的构造并不是正交的。一个最为直观的例子是,数字可能会用一个字母、两个字母或者三个字母来表示,如果两个数字要进行加减法,我们会发现它的数字是无法”对齐“的,你必须非常小心地分清楚不同的数位,而罗马数字恰好是没有数位的概念的。同样,当数字加减时会产生进位或者借位,罗马数字的构造会导致牵一发而动全身,因为任何一个中间步骤,我们都必须将其记录下来,记录的代价是将整个结果重写。反观阿拉伯数字,0到9共10个数字可以表示一切,形式上的统一让计算更加便捷,书写更为简洁,这套定义可以扩展到无限大的数上面去,可以扩展到小数、分数甚至无理数、虚数。这是否意味着,一个统一化的定义或者构造,更适合去做相关的运算流程或者逻辑流程呢?

    本文小结

      本文从一道有趣的题目作为引子,引出这篇文章的主题:罗马数字。我们首先为大家回顾了罗马数字的历史渊源。罗马数字是一种由古罗马人创造的数字系统,这套数字系统主要的用途是进行计数。罗马数字由I、V、X、L、C、D、M共7个基本数字组成,其基本规则是最多重复三次、左减右增。接下来,我们分析了罗马数字与阿拉伯数字相互转换的规律,并提供相关代码实现。在当前方案的基础上,我们引出了罗马数字中的”4000“问题,联系计算机中的数据溢出的相关概念,我们分析了为什么当罗马数字超过4000时会发生”溢出“,以及罗马人是如何解决这个问题的。虽然罗马数字比阿拉伯数字早2000年,可历史最终选择了阿拉伯数字,这里我们简要地分析了原因,因为罗马数字并不适合计算,而数字作为数学的基本要素,一个不能被运用到计算出的数字系统,最终免除不了被人们抛弃的命运。好了,这篇五一节前的文章 就是这样啦,4月再见!

    展开全文
  • 有趣数字

    2019-01-04 14:49:12
    考虑不到的点是 当出现重复数字的时候,差值最大和最下的对数计算问题。 #include &amp;amp;lt;iostream&amp;amp;gt; #include &amp;amp;lt;algorithm&amp;amp;gt; using namespace std; int main()...

    题目链接
    https://www.nowcoder.com/questionTerminal/af709ab9ca57430886632022e543d4c6

    小Q今天在上厕所时想到了这个问题:有n个数,两两组成二元组,相差最小的有多少对呢?相差最大呢?

    考虑不到的是 当出现重复数字的时候,差值最大和最小的对数计算问题。

    #include <iostream>
    #include <algorithm>
    using namespace std;
    int main(){
        int n;
        while(cin>>n){
            int A[n];
            for(int i=0;i<n;i++)
                cin>>A[i];
            sort(A,A+n);
            int a = 0, b=0;
            if(n>1){
            if(A[0]==A[n-1]){   // 所有的数相等
                a=b = n*(n-1)/2;
            }
            else{
                // 处理差最小的对数
                
                //先计算最小的值是多少
                int minDist=A[1]-A[0];
                for(int i=1;i<n-1;i++){
                    if(A[i+1]-A[i]<minDist)
                        minDist = A[i+1]-A[i];
                }
                
                if(minDist==0){  // 存在重复的数字
                    int repeatNum;
                    for(int i=0;i<n;i++){
                        repeatNum = 1;
                        while(i+1 <n && A[i+1]==A[i]){
                            repeatNum++;
                            i++;
                        }
                        a += repeatNum*(repeatNum-1)/2; 
                        
                    }
                    
                }else{
                   for(int i=0;i<n-1;i++){
                    if(A[i+1]-A[i]==minDist)
                        a++;
                } 
                }
                
                
                // 处理差最大的对数
                
                // 统计和A[0]相同的个数 统计和A[n-1]相同的个数
                int left = 0, right=0;
                for(int i=0;i<n;i++){
                    if(A[i]==A[0]) left++;
                    else break;
                }
                for(int i=n-1;i>=0;i--){
                    if(A[i]==A[n-1]) right++;
                    else break;
                }
                b = left*right;
            }
           }   
            
           cout<<a<<" "<<b<<endl;
            
            
        }
        
        
        
        return 0;
    }
    
    展开全文
  • 有趣数字(C++)

    2019-03-08 19:58:59
    [编程题] 有趣数字 时间限制:1秒 空间限制:32768K 小Q今天在上厕所时想到了这个问题:有n个数,两两组成二元组,相差最小的有多少对呢?相差最大呢? 输入描述: 输入包含多组测试数据。 对于每组测试数据: N - ...

    [编程题] 有趣的数字

    时间限制:1秒
    空间限制:32768K
    小Q今天在上厕所时想到了这个问题:有n个数,两两组成二元组,相差最小的有多少对呢?相差最大呢?

    输入描述:

    输入包含多组测试数据。

    对于每组测试数据:

    N - 本组测试数据有n个数

    a1,a2…an - 需要计算的数据

    保证:

    1<=N<=100000,0<=ai<=INT_MAX.

    输出描述:

    对于每组数据,输出两个数,第一个数表示差最小的对数,第二个数表示差最大的对数。

    输入例子1:

    6
    45 12 45 32 5 6

    输出例子1:

    1 2

    #include<iostream>
    #include<vector>
    #include<algorithm>
    
     using namespace std;
     
    int main(){
         int n;
         while(cin >> n)
         {
             vector<int> nums(n);
             for(int i = 0; i < n; i++)
                 cin>> nums[i];
             
             int minNum = 0,  maxNum = 0;
             //排序
             sort(nums.begin(), nums.end());
             
             //最大
             int l = 0, r = n - 1;
             int i = 1, j = 1;//i为最小数的个数,j为最大数的个数
             while(nums[l] == nums[l + 1]) { i++; l++;}
             while(nums[r] == nums[r - 1]) { j++; r--;}
             maxNum = i * j;
             
             //最小
             int minTemp = nums[1] - nums[0];//最小差值
             int count = 1;
             for(int i = 2; i < n; i++)
             {
                 if(nums[i] - nums[i - 1] < minTemp)
                 {
                     minTemp = nums[i] - nums[i - 1];
                     count= 1;
                 }else if(nums[i] - nums[i - 1] == minTemp) count++;
             }
             if(minTemp > 0) minNum = count;
             else 
             { 
                 for(int i = 1; i < n; i++)
                 {
                    
                     int j = i - 1;
                     while(nums[i] == nums[j] && j >= 0)
                     {
                         j--; minNum++;
                     }
                 }
             }
             cout << minNum <<' ' << maxNum << endl;
         }
         return 0;
     }
    

    求最大,即为数组中最小值个数*最大值个数;
    求最小,要判断最小差值是否为0,如果为0,则存在多个匹配问题,否则,单次循环可以解决。

    参考:腾讯笔试编程题:两两二元组差最小最大对数(C++) - Benson的学习笔记 - CSDN博客 https://blog.csdn.net/xubinlxb/article/details/52435409

    展开全文
  • [腾讯]有趣数字

    2018-09-14 21:29:11
    小Q今天在上厕所时想到了这个问题:有n个数,两两组成二元组,相差最小的有多少对呢?相差最大呢?     输入描述:   输入包含多组测试数据。 对于每组测试数据: ...对于每组数据,输出两个数,...

    小Q今天在上厕所时想到了这个问题:有n个数,两两组成二元组,相差最小的有多少对呢?相差最大呢?

     

     

    输入描述:

    
     

    输入包含多组测试数据。
    对于每组测试数据:
    N - 本组测试数据有n个数
    a1,a2...an - 需要计算的数据
    保证:
    1<=N<=100000,0<=ai<=INT_MAX.


     

    输出描述:

    
     

    对于每组数据,输出两个数,第一个数表示差最小的对数,第二个数表示差最大的对数。

     

    输入例子1:

    6
    45 12 45 32 5 6
    

     

    输出例子1:

    1 2

     

    #include <iostream>
    #include <algorithm>
    using namespace std;
    int main(){
        int N;
        while(cin>>N){
            int *p=new int[N];
            for(int i=0;i<N;i++)
            {
                cin>>p[i];
            }
            sort(p,p+N);
            //求取差最小的对数,肯定是相邻相减得到
            int Max=p[1]-p[0],Min=p[1]-p[0];
            int maxnumber=0,minnumber=0;
            for(int i=1;i<N;i++)
            {
                 if((p[i]-p[i-1])<Min)
                        Min=p[i]-p[i-1];
            }
            if(Min==0){
                    for(int i=0;i<N-1;i++)
                    {
                        for(int j=i+1;j<N;j++)
                            if(p[i]==p[j])
                            minnumber++;
                    }
    
            }else{
                for(int i=1;i<N;i++)
                {
                 if((p[i]-p[i-1])==Min)
                        minnumber++;
                }
            }
            //求取差最大的对数,,最大值数乘以最小值数
            Max=p[N-1]-p[0];
            int a=0,b=0;
            for(int i=0;i<N;i++)
            {
                if(p[i]==p[0])
                    a++;
                if(p[i]==p[N-1])
                    b++;
            }
            if(Max==0)
                maxnumber=N*(N-1)/2;
            else
                maxnumber=a*b;
            cout<<minnumber<<' '<<maxnumber<<endl;
            delete p;
        }
    }

     

    展开全文
  • 一些有趣数字

    2019-12-01 01:54:12
    上大学后认识了许多新的词语,其中就包括一些奇奇怪怪的数字们 #最大公约数【MaxCommonFactor】 方法太多,有空总结,先贴上某大佬给出的求最大公约数的函数写法的最简单的方法 int gcd(int a,int b) //用辗转相除法...
  • 有趣数字(引出二进制)

    千次阅读 2012-11-20 09:02:24
    /* * 程序的版权和版本声明部分 * Copyright (c)2012, 烟台大学计算机学院 * All rightsreserved. * 文件名称:有趣数字.cpp * 作 者:李巧丽 * 完成日期:2012年11月20日
  • 有趣数字图形

    千次阅读 2016-10-25 13:43:58
    Description 小文是一个兴趣广泛的人,最近在迷恋数学...他觉得能将数字按照一定的规则有序填入一个阵列(n*n)中是一个非常有趣而且具有挑战性的事情。现在他正在考虑对于给定的正整数n(0  1 2 3  8 9 4  
  • 宇宙:一些有趣数字

    千次阅读 2006-11-14 12:44:00
    宇宙:一些有趣数字 从天体距离到质子、电子 让我们先阐述几个概念:1.我们计量距离、时间和质量的单位分别为米和光年、秒和年以及克和千克,而外星人不可能理解这些单位,但宇宙间所有的物质,包括智慧生命...
  • [编程题]有趣数字

    2019-03-15 08:41:13
    热度指数:26051时间限制:1秒空间限制:32768K 小Q今天在上厕所时想到了这个问题:有n个数,两两组成二元组,相差最小的有多少对呢?相差最大呢? 输入描述: 输入包含多组测试数据。 对于每组测试数据: N - 本...
  • 我们称一个数是质数,而且数位中出现了5的数字有趣的。例如5, 59,457都是有趣的,而15,7不是。求1到100000中有趣的数的个数。 解法: 暴力解法 普及一下小学知识哈,懂了的就略过吧! 1.我们要知道什么叫做质数(2、...
  • [编程题] 有趣数字

    千次阅读 2017-01-22 18:27:34
    小Q今天在上厕所时想到了这个问题:有n个数,两两组成二元组,差最小的有多少对呢?差最大呢? 输入描述: 输入包含多组测试数据。 对于每组测试数据: ...对于每组数据,输出两个数,第一
  • 1084: 有趣数字图形I Time Limit: 1 Sec Memory Limit: 128 MB Submit: 47 Solved: 25 原题链接 Description 读入一个整数n(n Input 一个整数n Output n*n的...
  • 【HUSTOJ】1086: 有趣数字图形III

    千次阅读 2016-05-06 19:40:03
    1086: 有趣数字图形III Time Limit: 1 Sec Memory Limit: 128 MB Submit: 26 Solved: 15 原题链接 Description 读入一个整数n(n Input 一个整数n Output n*n的...
  • 看到这么个数字环,感觉很有趣,于是就想着用算法实现此数字环。 首先附图看效果,看是什么样的数字环 其实这个东西的算法实现是很简单的,写下它,是因为它代表了一种在算法中常用的一种思想,把一些看似很...
  • 1085: 有趣数字图形II Time Limit: 1 Sec Memory Limit: 128 MB Submit: 19 Solved: 14 原题链接 Description 输入一个整数n(n≤12),打印出如下要求的方阵:左上到右下对角线...
  • 有趣的罗马数字

    2013-04-06 10:31:02
    现在仍在使用的罗马数字有: I V X L C D M 字母I代表一个一,这可能来自于一条竖线或者伸出的一个手指。字母V很可能是一只手 的符号,代表五;两个字母V组成字母X,代表十;字母L代表五十;字母C来自于拉丁文中...
  • countupjs,一个有趣数字翻滚动画

    千次阅读 2018-06-21 14:31:40
    CountUp.js 是一个零依赖的轻量级 JavaScript 库,可用于快速创建以更有趣的方式显示数字的动画。用法参数:target = html元素的id,input,svg text元素,或者计数发生时先前选择的元素/输入的varstartVal = 你要...
  • [编程题] 有趣数字 时间限制:1秒 空间限制:32768K 小Q今天在上厕所时想到了这个问题:有n个数,两两组成二元组,差最小的有多少对呢?差最大呢? 输入描述:  输入包含多组测试数据。  ...
  • 都明白 X..Y 中有趣的数字个数实际上等于 1..Y 中有趣数字的个数减去 1..X-1 中的数字个数吧?我们只要考虑如何求 1..a 中的个数 f(a) 即可。 要求 f(a) ,我们可以通过自己构造数字的方
  • 一个有趣数字变化算法

    千次阅读 2019-12-26 13:56:27
    public class SevenNumber { /* * 由7位数中的(单位数与... * 尾数上数字相加超过10时,去掉十位数上数字,只保留个位数上的数字! (2) : 尾数上数字相减低于 0 时,直接转变新一轮数字 ! * 2.单位数与尾...
1 2 3 4 5 ... 20
收藏数 111,484
精华内容 44,593
关键字:

有趣的数字