杭电ACM课件学习 简单数学题

2 篇文章 0 订阅

抓紧时间练java。

1.模拟;杭电1008

比较简单的模拟题

java
import java.io.*;
import java.util.*;


public class Main
{
    public static void main(String args[])
    {
        Scanner cin = new Scanner(System.in);
        int n, sum;
        int[] line = new int[100];
        line[0] = 0;
        
        while(cin.hasNextInt())
        {
            n = cin.nextInt();
            if(n == 0) break;
            sum = 0;
        for(int i = 1; i <= n; i++)
            {
                line[i] = cin.nextInt();
                sum += line[i]-line[i-1]>0?(line[i]-line[i-1])*6+5:(line[i-1]-line[i])*4+5;
            }
       
            System.out.println(sum);
        }
    }
}
2.最小公倍数; 杭电1108
java
import java.io.*;
import java.util.*;


public class Main
{
    private static int gcd(int large, int small)
    {
        int temp;
        while(small != 0)
        {
            temp = large%small;
            large = small;
            small = temp;
        }
        return large;
    }
    
    public static void main(String args[])
    {
        Scanner cin = new Scanner(System.in);
        int a, b, re;
        
        while(cin.hasNextInt())
        {
            a = cin.nextInt();
            b = cin.nextInt();
            re = a > b?gcd(a, b):gcd(b, a);


            System.out.println(a*b/re);
        }
    }
}
3.rightmost digit ;杭电1061
简单想法-超时
java
import java.io.*;
import java.util.*;


public class Main
{
    public static void main(String args[])
    {
        Scanner cin = new Scanner(System.in);
        int a, rd, n;
        
        n = cin.nextInt();
        for(int i = 0; i < n; i++)
        {
        rd = 1;
            a = cin.nextInt();
            for(int j = 0; j < a; j++)
            {
            rd *= a%10;
            rd %= 10;
            }


            System.out.println(rd);
        }
    }
}
快速模幂 (二分加速)
java
import java.io.*;
import java.util.*;


public class Main
{
    public static void main(String args[])
    {
        Scanner cin = new Scanner(System.in);
        int a, rd, n, p;
        
        n = cin.nextInt();
        for(int i = 0; i < n; i++)
        {
            rd = 1;
            a = cin.nextInt();
            p = a;
            while(p != 0)
            {
                a %= 10;
                if(p%2 == 1) 
                {
                    rd = rd*a%10;  //主要是这里别溢出 等价于rd = (rd*a)%10
                }
                a *= a;
                p >>= 1;
            }


            System.out.println(rd);
        }
    }
}


int num[21]={0,1,4,7,6,5,6,3,6,9,0,1,6,3,6,5,6,7,4,9,0};


杭电2035
java
import java.io.*;
import java.util.*;


public class Main
{
    public static int fastpower(int a, int p, int mod)
    {
        int rd = 1;
        while(p != 0)
        {
            a %= mod;
            if(p%2 == 1) 
            {
                rd = rd*a%mod;  
            }
            a *= a;
            p >>= 1;
        }
        return rd;
    }
    
    public static void main(String args[])
    {
        Scanner cin = new Scanner(System.in);
        int a, p;
        
        while(cin.hasNextInt())
        {
            a = cin.nextInt();
            p = cin.nextInt();
            if(a == 0 && p == 0) break;
            System.out.println(fastpower(a, p, 1000));
            
        }
    }
}


4.fibonacci again
java
超时版
import java.io.*;
import java.util.*;


public class Main
{
public static int fibonacci(int n)
{
if(n == 0) return 7;
if(n == 1) return 11;

return fibonacci(n-1)+fibonacci(n-2);
}

    public static void main(String args[])
    {
        Scanner cin = new Scanner(System.in);
        int a;
        
        while(cin.hasNextInt())
        {
        a = cin.nextInt();
        if(fibonacci(a)%3 == 0)
        System.out.println("yes");
        else System.out.println("no");    
        }
    }
}


加速版
import java.io.*;
import java.util.*;


public class Main
{
    public static void main(String args[])
    {
        Scanner cin = new Scanner(System.in);
        int a;
        int[] fib = new int[1000010];
        fib[0] = 7;
        fib[1] = 11;
        for(int i = 2; i <= 1000000; i++)
        {
            fib[i] = (fib[i-1] + fib[i-2])%3;//小心溢出
        }
        while(cin.hasNextInt())
        {
            a = cin.nextInt();


            if(fib[a]%3 == 0)
                System.out.println("yes");
            else System.out.println("no");        
        }
    }
}


极速版
import java.io.*;
import java.util.*;


public class Main
{
    public static void main(String args[])
    {
        Scanner cin = new Scanner(System.in);
        int a;
        
        while(cin.hasNextInt())
        {
            a = cin.nextInt();


            if(a%4 == 2)                 //总结规律
                System.out.println("yes");
            else System.out.println("no");        
        }
    }
}


5.number sequence 根据数论,取模运算必有周期 1005这题有问题,可以简单看一下

6.杭电1205

BigInteger练习

import java.io.*;
import java.util.*;
import java.math.*;


public class Main
{
    public static void main(String args[])
    {
        Scanner cin = new Scanner(System.in);
        int n, max;
        BigInteger sum, tmp;
        
        n = cin.nextInt();
        for(int i = 0; i < n; i++)
        {
        max = 0;
                sum = BigInteger.valueOf(1);
        int cnt = cin.nextInt();
        for(int j = 0; j < cnt; j++)
        {
        int a = cin.nextInt();
        if(a > max) max = a;
                    tmp = BigInteger.valueOf(a);
        sum = sum.add(tmp);
        }
        sum = sum.divide(BigInteger.valueOf(2));
        sum = sum.add(BigInteger.valueOf(1));
        BigInteger tmax = BigInteger.valueOf(max);
        if(tmax.compareTo(sum) == -1)
        System.out.println("Yes");
        else System.out.println("No");
        }
    }
}


import java.io.*;
import java.util.*;


public class Main
{
    public static void main(String args[])
    {
        Scanner cin = new Scanner(System.in);
        int n, l;
        long sum = 0;//这个是long就行
        
        n = cin.nextInt();
        for(int i = 0; i < n; i++)
        {
            sum = 0;
            l = 0;
            int cnt = cin.nextInt();
            for(int j = 0; j < cnt; j++)
            {
                int a = cin.nextInt();
                if(a > l) l = a;
                sum += a;
            }
            sum = (sum+1)/2+1;
            if(l < sum)
                System.out.println("Yes");
            else System.out.println("No");
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值