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);
}
}