编程题赏析

来源:互联网 发布:华语男唱作人排名知乎 编辑:程序博客网 时间:2024/05/17 00:11
1:牛牛想对一个数做若干次变换,直到这个数只剩下一位数字。
变换的规则是:将这个数变成 所有位数上的数字的乘积。比如285经过一次变换后转化成2*8*5=80.
问题是,要做多少次变换,使得这个数变成个位数。 
输入描述:

输入一个整数。小于等于2,000,000,000。


输出描述:
输出一个整数,表示变换次数。


输入例子:
285

输出例子:

2

import java.util.Scanner;public class Test4 {     public static boolean containszero(char[] a)     {     for(int i=0;i<a.length;i++) { if(a[i]=='0') {         return true; } }         return false;      }public static void main(String[] args) {Scanner sc=new Scanner(System.in);while(sc.hasNext()){String s=sc.next();int count=0;char[] a=s.toCharArray();int length=s.length();    int n=Integer.parseInt(s);    while(n>9)    {    if(containszero(a))    {    count++;    break;    }    else    {      int temp=1;    for(int i=1;i<=a.length;i++)    {    int minq=(int) (n/Math.pow(10, a.length-i));    int yu=(int)(n%Math.pow(10, a.length-i));    temp=temp*minq;    n=yu;    }    count++;    n=temp;    a=String.valueOf(n).toCharArray();    }    }      System.out.println(count);}}}
2:给出一个区间[a, b],计算区间内“神奇数”的个数。
神奇数的定义:存在不同位置的两个数位,组成一个两位数(且不含前导0),且这个两位数为质数。
比如:153,可以使用数字3和数字1组成13,13是质数,满足神奇数。同样153可以找到31和53也为质数,只要找到一个质数即满足神奇数。 
输入描述:
输入为两个整数a和b,代表[a, b]区间 (1 ≤ a ≤ b ≤ 10000)。
输出描述:
输出为一个整数,表示区间内满足条件的整数个数
输入例子:
11 20
输出例子:
6

import java.util.HashMap;import java.util.Map;import java.util.Scanner;public class Test5 {   public static boolean ismagicnumber(int n)   {   String s=String.valueOf(n);   char[] a=s.toCharArray();  Map<Character,Integer> map=new HashMap<>();      for(int i=0;i<a.length;i++)      {      if(!map.containsKey(a[i]))      {      map.put(a[i], 1);      }      else      {      int minq=map.get(a[i]);      map.put(a[i], ++minq);           }            }      if(map.containsKey('1'))      {      if(map.get('1')>1||map.containsKey('3')||map.containsKey('4')||map.containsKey('6')||map.containsKey('7')||map.containsKey('9'))      {      return true;      }      }      else if(map.containsKey('3'))      {      if(map.containsKey('2')||map.containsKey('4')||map.containsKey('5')||map.containsKey('8')||map.containsKey('7'))      {      return true;      }      }      else if(map.containsKey('7'))      {      if(map.containsKey('4')||map.containsKey('6')||map.containsKey('9'))      {      return true;      }      }      else if(map.containsKey('9'))      {      if(map.containsKey('2')||map.containsKey('5')||map.containsKey('8'))  {  return true;  }            }return false;   }public static void main(String[] args) {  Scanner sc=new Scanner(System.in);  while(sc.hasNext()){   int a=sc.nextInt();   int b=sc.nextInt();   int count=0;   for(int i=a;i<=b;i++)   {    if(i<10)  {  continue;  }  else if(ismagicnumber(i))  {  count++;  }      }   System.out.println(count);}}}

3:牛牛手里有一个字符串A,羊羊的手里有一个字符串B,B的长度大于等于A,所以牛牛想把A串变得和B串一样长,这样羊羊就愿意和牛牛一起玩了。
而且A的长度增加到和B串一样长的时候,对应的每一位相等的越多,羊羊就越喜欢。比如"abc"和"abd"对应相等的位数为2,为前两位。
牛牛可以在A的开头或者结尾添加任意字符,使得长度和B一样。现在问牛牛对A串添加完字符之后,不相等的位数最少有多少位? 

输入描述:
第一行为字符串A,第二行为字符串B,A的场地小于等于B的长度,B的长度小于等于50.字符均为小写字母。


输出描述:
输出一个整数表示A串添加完字符之后,不相等的位数最少有多少位?

输入例子:
abecabc

输出例子:
1

package com.itheima.niuke.com;import java.util.*;public class Test6{    public static void main(String[]args)    {        Scanner in = new Scanner(System.in);        while(in.hasNext())        {            String A = in.nextLine();            String B = in.nextLine();            int len = B.length()-A.length();            int max =0;            for(int i=0;i<=len;i++)            {                int tempMax=0;                int sub=0;                for(int j=0;j<A.length();j++)                {                    if(A.charAt(j)==B.charAt(j+i))                        tempMax++;                }                if(max<tempMax)                    max=tempMax;            }            System.out.println(B.length()-(max+len));        }    }    }