编程题赏析

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串添加完字符之后,不相等的位数最少有多少位?

输入例子:
abe
cabc

输出例子:
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));
        }
    }
    
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值