编写一个程序,接受两个整数作为最小和最大限制,并计算它们在限制范围内的总数

时间:2015-09-28 12:41:28

标签: java

例如:

1)如果用户输入1 11则应打印4。

2)如果用户输入11 111则应打印34。

2 个答案:

答案 0 :(得分:2)

使用Java.util.Scanner执行此操作。这在java中是一个非常基本的东西。我建议你做一些研究:)这是一个简单的教程: http://www.homeandlearn.co.uk/java/user_input.html

无论如何,这里是一个回答:

public static void main(String[] args){

    Scanner user_input = new Scanner( System.in );
    String anInputString;

    anInputString = user_input.next( );


    if (anInputString.equals("1 11")){
    System.out.println("4")
    }
    if (anInputString.equals("11 111"){
    System.out.println("34")
    }
}

编辑:

如果您希望输入“4”,而输入位于“1”和“11”之间。或“34”,如果它在“10”和“112”之间你应该试试这个:

 public static void main(String[] args){

        Scanner user_input = new Scanner( System.in );
        int anInputInt;

        anInputInt = user_input.nextInt( );

        if (0 < anInputInt && anInputInt < 11 ){ //if input is (1-10)
        System.out.println("4")
        }
        if (11 <= anInputInt && anInputInt <= 111){ //if input is (11-111)
        System.out.println("34")
        }
    }

无论如何你应该编辑你的问题:D我认为很多人都很乐意帮助你,但是根本无法理解你的问题0.0

终于在我明白你真正想做的事情之后:

   public static void main(String[] args){

        Scanner user_input = new Scanner( System.in );
        int anInputInt;

        anInputInt = user_input.nextInt( );

        if(anInputString < 0){
        anInputString = anInputstring*(-1);
        }

        int oneCount = 0;

        //gets all numbers in your specified range
        //if you want to start at number "xx" change the value of aNumberInRange likewise
        for (int aNumberInRange = 0; aNumberInRange < anInputInt; aNumberInRange++){ 

            String str = String.valueOf(aNumberInRange);

            //iterates through every character of an aNumberInRange and counts if a "1" occurs
            for(int i = 0; i < str.length(); i++){
               char c = str.charAt(i);        
               if (c == 1){
                oneCount++
               }
            }
        }
        system.out.println(oneCount);
      }

无论谁阅读此解决方案。客户端想要计算指定范围内数字“1”的所有出现次数。这也适用于负数

答案 1 :(得分:0)

我强烈建议您研究问题的数学,然后提出一个聪明的算法,然后再实施。 1s远远不是随机分布在一系列数字中的数字; - )

然而,总有蛮力的方法。 (这只是为了显示一种可能性,也是解决问题的最糟糕方法之一)

    int count = 0;
    for(int i = 1; i<=11; i++)
    {
        String number = String.valueOf(i);
        while(number.contains("1"))
        {
            number= number.substring(number.indexOf("1")+1);
            count ++;
        }
    }
    System.out.println(count);

修改 对于那些对使用log,mod和div更好的蛮力版本感兴趣的人(最好我能想出来^^):

    int count2 = 0;     
    for(int i = lowerbound; i<=upperbound; i++)
    {
        int temp = Math.abs(i); //make positive. No negative log 
        if(temp==0) //beware the log(0) trap 
            continue;
        int length = (int)(Math.log10(temp)+1); //count digits
        for(int j = length -1; j>=0 ; j--)  //inspect digit for digit
        {
            if(temp % 10 == 1)
            {
                count2 ++;
            }
            temp = temp / 10;
        }
    }

使用nano()测量范围为-1000000到1000000的测试(因此没有单位)。对于CharAt方法,请参阅Tom Wellbrock的回答。 即使log,%和/是非常慢的数学运算,String创建的成本也更高。

没有java Optimization ::

  • 子串:14000002时间:
    • 18351768293
  • 记录:14000002时间:
    • 2895089202
  • CharAt:14000002时间:
    • 13929667983

使用java优化(创建字符串变得便宜很多,特别是当它们出现两次并且所有的小调整为什么我们如此喜欢java)

  • 子串:14000002时间:
    • 1088103359
  • 记录:14000002时间:
    • 568686169
  • CharAt:14000002时间:
    • 741721424