[Chapter 1 Java Algorithm Questions]

1. Enter a one-dimensional array

package acm;

import java.util.Scanner;

public class zimeci1003 {
    
    

	public static void main(String[] args) {
    
    
		
		
		
		int a=0,b=0,n=0;//定义2个整型变量
		Scanner sc=new Scanner(System.in);
		while(sc.hasNext())//循环读入若干组数据
		{
    
    
			n=sc.nextInt();//几组数据
			if(n==0) break;//输入0,结束程序
			int sum=0;//记录累加
			
			for(int i=1;i<=n;i++)
			{
    
    
				sum=sum+sc.nextInt();//循环n次,每次从键盘录入一个整数。累加到sum
			    
			}
			System.out.println(sum);
		}

	}
		
	}



2. Enter a two-dimensional array

package acm;

import java.util.Scanner;

public class zimeoj {
    
    

	public static void main(String[] args) {
    
    
		
		int t=0,n=0;//有t组测试数据,每组有n个
		Scanner sc=new Scanner(System.in);
		while(sc.hasNext())//循环读入若干组数据
		{
    
    
			t=sc.nextInt();//读入有几组测试数据
			for(int i=1;i<=t;i++)
			{
    
    
				n=sc.nextInt();//每组有n个数据
			    int sum=0;//记录累加
			    for(int j=1;j<=n;j++)
			   {
    
    
				sum=sum+sc.nextInt();//循环n次,每次从键盘录入一个整数。累加到sum
			   }
			    System.out.println(sum);
			}
			System.out.println();
		}
	}
}

3, BufferedReader(new InputStreamReader(System.in));//Fast method

package acm;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Scanner;

public class zimeoj1000 {
    
    

	public static void main(String[] args) {
    
    
		
		int a=0,b=0,n=0;//定义2个整型变量
		BufferedReader in=new BufferedReader(new InputStreamReader(System.in));//快读
		//System.in读取的字节流
		//InputStreamReader字节流->字符流转换的一个桥梁
		//BufferedReader类从字符输入流中带缓存功能的读取字符
		
		Scanner sc=new Scanner(System.in);
		while(sc.hasNext())//循环读入若干组数据
		{
    
    
			n=sc.nextInt();//几组数据
			
			for(int i=1;i<=n;i++)
			{
    
    
				a=sc.nextInt();
			    b=sc.nextInt();
			
			    System.out.println(a+b);
			}
			
		}

	}

}

4. Regular expression syntax

package acm;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
//快读方式,提高效率
public class zimeojfast {
    
    
	public static void main(String[] args) {
    
    
		BufferedReader in=new BufferedReader(new InputStreamReader(System.in));//快读
		//System.in读取的字节流
		//InputStreamReader字节流->字符流转换的一个桥梁
		//BufferedReader类从字符输入流中带缓存功能的读取字符 提供readLine()按行读取字符
		String line="";//每次从in里面去读取一行字符串
		try 
		{
    
    
			while((line=in.readLine())!=null)//只要还有行就继续读取,每次读一行就放到line字符串里
			{
    
    
				String[] s=line.split(" +");//1 2, 1  2 多个空格 分隔以后的字符串数组
				//正则表达式语法
				int a=Integer.parseInt(s[0]);
				int b=Integer.parseInt(s[1]);
				System.out.println(a+b);
			}
		} catch (IOException e) 
		{
    
    
			e.printStackTrace();
		}
			
		
	}
}

5. Enter a number to determine whether it is in the Fibonacci sequence

package acm;

import java.util.Scanner;
//输入一个数,判断是不是处于斐波那契数列
public class 打表 {
    
    
//fib 46项超过int 93项超过long
	public static void main(String[] args) {
    
    
		
	
		/*
		long[] fib=new long[61];
		fib[1]=1;
		fib[2]=1;
		for(int i=3;i<fib.length;i++)
		{
			fib[i]=fib[i-1]+fib[i-2];
		}
		for(int i=1;i<fib.length;i++)
		{
			System.out.printf("fib第%02d项:",i);
			if(fib[i]%3==0) System.out.printf("\t被3整除");
			if(fib[i]%4==0) System.out.printf("\t被4整除");
			if(fib[i]%12==0) System.out.printf("\t被12整除\n");
			
			System.out.println();
		}
// 1 4 8 12 16 被3整除,可能每4项都能整除3
		//每6项能被4整数 每12项能被12整除
		 
		 */
		Scanner sc=new Scanner(System.in);
		while(sc.hasNext())
		{
    
    
			int n=sc.nextInt();
			if(n%12==0) System.out.println("整除12");
			else if(n%4==0) System.out.println("整除3");
			else if(n%6==0) System.out.println("整除4");
			else System.out.println("NO");
		}
		
	}
}

6. Large integer problem 100! How many 0s are there at the end?

Method 1: BigInteger.valueOf(i) converts i into a large integer
Method 2: Convert it into a math problem 100! There are several 0==100 behind! There are several 5 in the formula

public static void main(String[] args) {
    
    
		String num="FF";//num16进制,那么对应的是10进制255
		System.out.println(BigInteger.ONE);
		//实例化一个大数对象
		BigInteger a=new BigInteger("9527");//9527为字符串,把9527作为参数,放在构造函数里,就可以实例化得到大数的对象、
		System.out.println(a);//打印的字符串
		//用另一个实例化一个大数对象
		BigInteger b=new BigInteger(num,16);//把字符串当作16进制
		System.out.println(b);//输出的是十进制
		System.out.println(b.toString(8));//转化为八进制377
		System.out.println(b.toString(2));//转化为二进制11111111
		
		System.out.println(a.add(b));//加 9782
		System.out.println(a.subtract(b));//减去9272
		System.out.println(a.multiply(b));//乘2429385
		System.out.println(a.divide(b));//除37
		System.out.println(a.mod(b));//取余92
		
		
		System.out.println(a.gcd(b));//求最大公约数1
		System.out.println(a);
		System.out.println(a.isProbablePrime(1));//判断是不是素数
		
		BigInteger two=new BigInteger("2");
		System.out.println(BigInteger.TEN.modPow(two, new BigInteger("13")));//10^2%13=9
		
		
	}
package acm;

import java.math.BigInteger;

public class 大整数 {
    
    

	//100!尾部有多少0
	
	public static void main(String[] args) {
    
    
		int n=100;
		f1(100);
		f2(5);
	}
	public static void f2(int n)//方法二 转化为数学问题  100!后面有几个0  ==100!的式子里面有几个5  
	{
    
    
		int ans=0;
		while(n>0)
		{
    
    
			ans=ans+n/5;
			n=n/5;
		}
		System.out.println(ans);
	}
	
	public static void f1(int n)//方法一
	{
    
    
		BigInteger a=new BigInteger("1");
		for(int i=1;i<=n;i++)
		{
    
    
			a=a.multiply(BigInteger.valueOf(i));//BigInteger.valueOf(i)把i转变为大整数 
		}
		String s=a.toString();//Arrays的toString方法是返回指定数组内容的字符串表示形式
		System.out.println(s);
		int count=0;
		for(int i=s.length()-1;i>=0;i--)
		{
    
    
			if(s.charAt(i)!='0') break;//找到第一个非0的数
			count++;//记录0的个数
		}
		System.out.println(count);
	}
	
}

7, arithmetic progression

The second code snippet: converted to the greatest common divisor problem

public class 等差数列 {
    
    

	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<a.length;i++)
		{
    
    
			a[i]=sc.nextInt();
			
		}
		//因为数项无规则,所以要排序
		Arrays.sort(a);
		
		//求相邻项的差,因为是4个数,所以差有3个
		int b[]=new int[n-1];
		for(int i=1;i<b.length;i++)
		{
    
    
			b[1]=a[i+1]-a[i];
			
		}
		
		//求公因子
		int gg=b[0];
		for(int i=1;i<b.length;i++)
		{
    
    
			gg=gcd(gg,b[0]);//求最大公因子
			
		}
		
		if(b[0]==0)//如果出现差为0的情况,最短的项数就是给出的数组的项数
		{
    
    
			System.out.println(n);
		}
		else {
    
    
			System.out.println();
		}
	}
	
	private static int gcd(int a,int b)//求最大公因子
	{
    
    
		return b==0?a:gcd(b,a%b);
	}

}
//转化为最大公约数问题
public class 等差数列 {
    
    

    public static void main(String[] args) {
    
    
        Scanner scan = new Scanner(System.in);

            int n = scan.nextInt();
            
            int[] a = new int[n];
            for(int i = 0;i<n;i++) {
    
    
                a[i] = scan.nextInt();
            }//输入整数
            Arrays.sort(a);//排序
            int max = a[n-1];//最后数项
            int min = a[0];//第一个数
            int d = Integer.MAX_VALUE;//最小公差
            //Integer.MIN_VALUE 是 java.lang 包的 Integer 类中的一个常量,指定存储 Java 中任何整数变量的最小可能值。
            //实际值是:-2147483648
            //输入n个数,所以有n-1个差
            for(int i = 0;i<n-1;i++) {
    
    
                if(d>a[i+1]-a[i]) {
    
    
                    d = a[i+1]-a[i];//最小公差
                }
            }
            if(d==0){
    
    //如果公差为0,输出n
                System.out.print(n);
        return;
            }
            System.out.print((max-min)/d+1);
    }

}

Guess you like

Origin blog.csdn.net/m0_53524766/article/details/131381828