2017蘑菇街编程题详解

一:现在有一张半径为r的圆桌,其中心位于(x,y),现在他想把圆桌的中心移到(x1,y1)。每次移动一步,都必须在圆桌边缘固定一个点然后将圆桌绕这个点旋转。问最少需要移动几步。
输入描述:
一行五个整数r,x,y,x1,y1(1≤r≤100000,-100000≤x,y,x1,y1≤100000)
输出描述:
输出一个整数,表示答案
输入例子:
2 0 0 0 4
输出例子:

1

package com.itheima.MoGuJie;

import java.util.Scanner;

/**
 * 现在有一张半径为r的圆桌,其中心位于(x,y),现在他想把圆桌的中心移到(x1,y1)。每次移动一步,都必须在圆桌边缘固定一个点然后将圆桌绕这个点旋转。问最少需要移动几步。
输入描述:
一行五个整数r,x,y,x1,y1(1≤r≤100000,-100000≤x,y,x1,y1≤100000)
输出描述:
输出一个整数,表示答案
输入例子:
2 0 0 0 4
输出例子:
1
 * @author Dell
 *
 */
public class Test1 {

	public static void main(String[] args) {
	  Scanner sc=new Scanner(System.in);
	  while(sc.hasNext()){
	  int r=sc.nextInt();
	  int x=sc.nextInt();
	  int y=sc.nextInt();
	  int x1=sc.nextInt();
	  int y1=sc.nextInt();
	  double distance=Math.sqrt(Math.pow((x1-x), 2)+Math.pow((y1-y), 2));
	  if(distance%(2*r)==0)
	  {
		  System.out.println((int)distance/(2*r));
		  
	  }
	  else
	  {

		  System.out.println((int)distance/(2*r)+1);
	  

	 }
	  }
}
}

二:给定一个递增序列,a1 <a2 <...<an 。定义这个序列的最大间隔为d=max{ai+1 - ai }(1≤i<n),现在要从a2 ,a3 ..an-1 中删除一个元素。问剩余序列的最大间隔最小是多少?


输入描述:
第一行,一个正整数n(1<=n<=100),序列长度;接下来n个小于1000的正整数,表示一个递增序列。
输出描述:
输出答案。
输入例子:
5
1 2 3 7 8
输出例子:
4

package com.itheima.MoGuJie;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 时间限制:1秒
空间限制:32768K
给定一个递增序列,a1 <a2 <...<an 。定义这个序列的最大间隔为d=max{ai+1 - ai }(1≤i<n),现在要从a2 ,a3 ..an-1 中删除一个元素。问剩余序列的最大间隔最小是多少?

输入描述:
第一行,一个正整数n(1<=n<=100),序列长度;接下来n个小于1000的正整数,表示一个递增序列。
输出描述:
输出答案。
输入例子:
5
1 2 3 7 8
输出例子:
4
 * 
 * @author Dell
 *
 */
public class Test2 {
    public static int solution(List<Integer> list)
    {
    	int max=0;
     for(int i=0;i<list.size()-1;i++)
     {
    	 if(list.get(i+1)-list.get(i)>max)
    	 {
    		 max=list.get(i+1)-list.get(i);
    	 }
    	 
     }
    	
    return max; 	
    }
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		while(sc.hasNext()){
		int n=sc.nextInt();
		int[] a=new int[n];
		for(int i=0;i<n;i++)
		{
			a[i]=sc.nextInt();
		}
		List<Integer> list=new ArrayList<>();
		for(int i=0;i<a.length;i++)
		{
			list.add(a[i]);
		}
		int min=Integer.MAX_VALUE;
		for(int i=1;i<list.size()-1;i++)
		{
			int beifen=list.get(i);
			list.remove(i);
			int temp=solution(list);
			  if(temp<min)
			  {
				  min=temp;
			  }
			  list.add(i, beifen);
		}
       System.out.println(min);
	}
	}
}
三:有一个投篮游戏。球场有p个篮筐,编号为0,1...,p-1。每个篮筐下有个袋子,每个袋子最多装一个篮球。有n个篮球,每个球编号xi 。规则是将数字为xi 的篮球投到xi 除p的余数为编号的袋里。若袋里已有篮球则球弹出游戏结束输出i,否则重复至所有球都投完。输出-1。问游戏最终的输出是什么?
输入描述:
第一行两个整数p,n(2≤p,n≤300)。p为篮筐数,n为篮球数。接着n行为篮球上的数字xi(0≤xi≤1e9)
输出描述:
输出游戏的结果
输入例子:
10 5
0
21
53
41
53
输出例子:
4

package com.itheima.MoGuJie;

import java.util.Scanner;

/**
 * 有一个投篮游戏。球场有p个篮筐,编号为0,1...,p-1。每个篮筐下有个袋子,每个袋子最多装一个篮球。有n个篮球,每个球编号xi 。规则是将数字为xi 的篮球投到xi 除p的余数为编号的袋里。若袋里已有篮球则球弹出游戏结束输出i,否则重复至所有球都投完。输出-1。问游戏最终的输出是什么?

输入描述:
第一行两个整数p,n(2≤p,n≤300)。p为篮筐数,n为篮球数。接着n行为篮球上的数字xi(0≤xi≤1e9)
输出描述:
输出游戏的结果
输入例子:
10 5
0
21
53
41
53
输出例子:
4
 * @author Dell
 *
 */
public class Test4 {

	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		while(sc.hasNext()){
		int p=sc.nextInt();
		int n=sc.nextInt();
		int[] a=new int[n];
		for(int i=0;i<n;i++)
		{
			a[i]=sc.nextInt();
		}
       boolean[] flag=new boolean[p];
       int result=-1;
       for(int i=0;i<a.length;i++)
       {
    	    int r=a[i]%p;
    	   if(flag[r]==false)
    	   {
    		   flag[r]=true;
    		   continue;
    	   } 
    	   else
    	   {
    		   result=i+1;
    		   break;
    	   }
    	   
       }
		
		System.out.println(result);
	}
	}
}
四:给定一个字符串,问是否能通过添加一个字母将其变为回文串。

输入描述:
一行一个由小写字母构成的字符串,字符串长度小于等于10。


输出描述:
输出答案(YES\NO).

输入例子:
coco

输出例子:
YES
package com.itheima.MoGuJie;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 
 * 
 * @author Dell
 *
 */
public class Test5 {
  public static boolean isHuiWen(List<Character> s)
  {        boolean result=true;
	    for(int i=0;i<s.size()/2;i++)
	    {
	    	if(s.get(i)!=s.get(s.size()-1-i))
	    	{
	    		result=false;
	    		break;
	    	}
	    }
	  return result;
  }
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		while(sc.hasNext()){
		 String s=sc.nextLine();
		 List<Character> list=new ArrayList<>();
		 boolean result=false;
		 for(int i=0;i<s.length();i++)
			 list.add(s.charAt(i));
		 for(int i=0;i<=s.length()-1;i++)
		 {
		    for(int j=0;j<=25;j++)
		    {
		      list.add(i, (char) ('a'+j));
		     result=isHuiWen(list);
		      if(result==true)
		      {
		    	  System.out.println("YES");
		    	break;
		      }
		      else
		      {
		    	  list.remove(i);
		      }
		    }
	       if(result==true)
	    	   break;
		 }
		if(result==false)
		{
			for(int j=0;j<=25;j++)
			{
				list.add((char)('a'+j));
				  result=isHuiWen(list);
				  if(result==true)
				  {
					  System.out.println("YES");
					break;
				  }
				  else
					  list.remove(list.size()-1);
			}	
		}
		if(result==false)
		System.out.println("NO"); 
	}
	}
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值