Java op复习(二)

15:整数的立方和

总时间限制:1000ms      内存限制:65536kb

描述

给定一个正整数k(1<k<10),求1到k的立方和m。即m=1+2*2*2+…+k*k*k。

输入

输入只有一行,该行包含一个正整数k。

输出

输出只有一行,该行包含1到k的立方和。

样例输入

5

样例输出

225

代码:

import java.util.Scanner;

public class Main{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int k=sc.nextInt();
		int sum=0;
		for(int i=0;i<=k;i++) {
			sum+=i*i*i;
		}
		System.out.println(sum);
	}
}

16:化验诊断

总时间限制:1000ms      内存限制:65536kb

描述

下表是进行血常规检验的正常值参考范围,及化验值异常的临床意义:


给定一张化验单,判断其所有指标是否正常,如果不正常,统计有几项不正常。化验单上的值必须严格落在正常参考值范围内,才算是正常。正常参考值范围包括边界,即落在边界上也算正常。

输入

输出

对于每组测试数据,输出一行。如果所有检验项目正常,则输出:normal;否则输出不正常的项的数目。

样例输入

2

female 4.5 4.0 115 37 200

male 3.9 3.5 155 36 301

样例输出

normal

3

代码:

import java.util.Scanner;
public class Main{
	public static void main(String[] args) {
		Scanner sc =new Scanner(System.in);
		int k =sc.nextInt();
		
		for(int i=0;i<k;i++)
		{
			int n=0;
			String sex=sc.next();
            double WBC=sc.nextDouble();
            double RBC=sc.nextDouble();
            double HGB=sc.nextDouble();
            double HCT=sc.nextDouble();
            double PLT=sc.nextDouble();
            if(WBC<4.0||WBC>10.0)
            	n++;
            if(RBC<3.5||RBC>5.5)
            	n++;
            if(PLT<100||PLT>300)
            	n++;
            if("male".equals(sex))
            {
            	if(HGB<120||HGB>160)
                	n++;
                if(HCT<42||HCT>48)
                	n++;
            }
            else
            {
            	if(HGB<110||HGB>150)
                	n++;
                if(HCT<36||HCT>40)
                	n++;
            }
            if (n==0) {
                System.out.println("normal");
            }
            else{
                System.out.println(n);
            }

		}
		
	}
}

17:求分数序列和

总时间限制:1000ms      内存限制:65536kb

描述

有一个分数序列 2/1,3/2,5/3,8/5,13/8,21/13,.... 求这个分数序列的前n项之和。

输入

输入有一行:正整数n。

输出

输出有一行:分数序列的和(浮点数,精确到小数点后4位)。
可以printf("%.4lf\n", a)输出浮点数并精确到小数点后4位。

样例输入

99

样例输出

160.4849

代码:

import java.util.Scanner;

public class Main{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n=sc.nextInt();
		double x=2;
		double y=1;
		double sum=0.0;
		for(int i=0;i<n;i++) {
			sum+=x/y;
			x=x+y;
			y=x-y;
		}
		System.out.printf("%.4f\n",sum);
	}
}

18:求阶乘的和

总时间限制:1000ms      内存限制:65536kb

描述

给定正整数n,求不大于n的正整数的阶乘的和(即求1!+2!+3!+...+n!)

输入

输入有一行,包含一个正整数n(1 < n < 12)。

输出

输出有一行:阶乘的和。

样例输入

5

样例输出

153

代码:

import java.util.Scanner;

public class Main{
	public static void main(String[] args) {
		Scanner sc =new Scanner(System.in);
		int n=sc.nextInt();
		long sum=0;
		for(int j=1;j<=n;j++){//外循环
			int s=1;
		for(int i=1;i<=j;i++){//内循环,求对应数的乘方
			s=s*i;
			}
			sum=sum+s;
		}
		System.out.println(sum);
	}
}

19:打印完数

总时间限制:1000ms      内存限制:65536kb

描述

一个数如果恰好等于它的因子之和,这个数就成为“完数”。例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。编程序打印出1000之内(包括1000)所有的完数,并按如下格式输出其所有因子:6 its factors are 1,2,3

输入

无输入

输出

输出1000以内所有的完数及其因子,每行一个完数。

样例输入

样例输出

代码:

import java.util.*;
import java.math.*;
public class Main{
	public static void main(String[] args){
		for(int i = 6; i <= 1000; i++)
		{
			Main a = new Main();
			if(a.check(i))
			{
				int cnt = 0;
				int[] tmp = new int[1010];
				System.out.print(i+" its factors are ");
				for(int j = 1; j < i; j++)
				{
					if(i%j==0)
						tmp[++cnt] = j;
				}
				for(int j = 1; j < cnt; j++)
					System.out.print(tmp[j]+",");
				System.out.println(tmp[cnt]);
			}
		}
	}
	public boolean check(int n)
	{
		int sum = 1;
		for(int i = 2; i < n; i++)
		{
			if(n%i==0)
				sum += i;
		}
		if(sum==n)
			return true;
		return false;
	}
}

 此题源自博主:Hugh_White


20:数组逆序重放

总时间限制:1000ms      内存限制:65536kb

描述

将一个数组中的值按逆序重新存放。例如,原来的顺序为8,6,5,4,1。要求改为1,4,5,6,8。

输入

输入为两行:第一行数组中元素的个数n(1<n<100),第二行是n个整数,每两个整数之间用空格分隔。

输出

输出为一行:输出逆序后数组的整数,每两个整数之间用空格分隔。

样例输入

5

8 6 5 4 1

样例输出

1 4 5 6 8

代码:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int[] b = new int[a];
        for (int i = 0; i < a; i++) {
            b[i] = sc.nextInt();//存放数组
        }
        for (int j = 0; j < a; j++) {
            System.out.print(b[a-j-1]+" ");//倒序输出
        }
    }
}

21:与7无关的数

总时间限制:1000ms      内存限制:65536kb

描述

一个正整数,如果它能被7整除,或者它的十进制表示法中某一位上的数字为7,则称其为与7相关的数.现求所有小于等于n(n < 100)的与7无关的正整数的平方和.

输入

输入为一行,正整数n(n < 100)

输出

输出一行,包含一个整数,即小于等于n的所有与7无关的正整数的平方和。

样例输入

21

样例输出

2336

代码:

import java.util.Scanner;
public class Main {
    public static void main(String [] args) {
        Scanner sc =new Scanner(System.in);
        int n =sc.nextInt();
        int sum=0;
        for(int i=0;i<=n;i++)
        {
            if (!he(i)) {
                sum += i * i;
            }
        }
        System.out.println(sum);
    }
    static boolean he(int n) {
        if (n % 7 == 0) {
            return true;
        }
        String s = n + "";
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '7')
                return true;
        }
        return false;
    }

}

22:骑车与走路

总时间限制:1000ms      内存限制:65536kb

描述

在北大校园里,没有自行车,上课办事会很不方便.但实际上,并非去办任何事情都是骑车快,因为骑车总要找车、开锁、停车、锁车等,这要耽误一些时间.假设找到自行车,开锁并车上自行车的时间为27秒;停车锁车的时间为23秒;步行每秒行走1.2米,骑车每秒行走3.0米.请判断走不同的距离去办事,是骑车快还是走路快.

输入

第一行为待处理的数据的数量n
其后每一行整数为一次办事要行走的距离,单位为米.

输出

对应每个整数,如果骑车快,输出一行"Bike";如果走路快,输出一行"Walk";如果一样快,输出一行"All".

样例输入

4

50

90

120

180

样例输出

Walk

Walk

Bike

Bike

代码:

import java.util.Scanner;
public class Main{
	public static void main(String[] args) {
		Scanner sc =new Scanner(System.in);
		int n=sc.nextInt();
		for(int i=0;i<n;i++) {
			int m=sc.nextInt();
			double T1=m/3.0+50;
            double T2=m/1.2;
            if (T1<T2) 
            {
                System.out.println("Bike");
            } else if (T1>T2) 
            {
                System.out.println("Walk");
            } else 
            {
                System.out.println("All");
            }

		}
	}
}

 

23:求出e的值

总时间限制:1000ms      内存限制:65536kb

描述

利用公式e = 1 + 1/1! + 1/2! + 1/3! + ... + 1/n! 求e 。

输入

输入只有一行,该行包含一个整数n(2<=n<=15),表示计算e时累加到1/n!。

输出

输出只有一行,该行包含计算出来的e的值,要求打印小数点后10位。

样例输入

10

样例输出

2.7182818011

代码:

import java.util.Scanner;
public class Main{
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int m=sc.nextInt();
		double sum=1;
		double n=1;
		for(int i=1;i<=m;i++) {
			
			n*=i;
			sum+=1/n;
		}
		System.out.printf("%.10f",sum);
	}
}

24:细菌繁殖

总时间限制:1000ms      内存限制:65536kb

描述

一种细菌的繁殖速度是每天成倍增长。例如:第一天有10个,第二天就变成20个,第三天变成40个,第四天变成80个,……。现在给出第一天的日期和细菌数目,要你写程序求出到某一天的时候,细菌的数目。

输入

第一行有一个整数n,表示测试数据的数目。其后n行每行有5个整数,整数之间用一个空格隔开。第一个数表示第一天的月份,第二个数表示第一天的日期,第三个数表示第一天细菌的数目,第四个数表示要求的那一天的月份,第五个数表示要求的那一天的日期。已知第一天和要求的一天在同一年并且该年不是闰年,要求的一天一定在第一天之后。数据保证要求的一天的细菌数目在长整数(long)范围内。

输出

对于每一组测试数据,输出一行,该行包含一个整数,为要求的一天的细菌数。

样例输入

2

1 1 1 1 2

2 28 10 3 2

样例输出

2

40

代码:

import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        for (int i = 0; i < n; i++) {
            int m1 = sc.nextInt();
            int d1 = sc.nextInt();
            int gs = sc.nextInt();
            int m2 = sc.nextInt();
            int d2 = sc.nextInt();
            int ts = ts(m1, d1, m2, d2);
            for (int j = 0; j < ts; j++) {
                gs = gs * 2;
            }
            System.out.println(gs);
        }
    }
 
    static int ts(int m1, int d1, int m2, int d2) {
        int[] m = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
        if (m1 == m2) {
            return d2 - d1;
        }
        int sum = d2 + m[m1] - d1;
        for (int i = m1 + 1; i < m2; i++) {
            sum += m[i];
        }
        return sum;
    }
}

25:求平均年龄

总时间限制:1000ms      内存限制:65536kb

描述

班上有学生若干名,给出每名学生的年龄(整数),求班上所有学生的平均年龄,保留到小数点后两位。

输入

第一行有一个整数n(1<= n <= 100),表示学生的人数。其后n行每行有1个整数,表示每个学生的年龄,取值为15到25。

输出

输出一行,该行包含一个浮点数,为要求的平均年龄,保留到小数点后两位。

样例输入

2

18

17

样例输出

17.50

代码:

import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        double sum = 0;
        for (int i = 0; i < n; i++) {
            sum += sc.nextInt();
        }
        System.out.printf("%.2f", sum / n);
    }
 
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值