目录
1:A+B Problem
2:输出第二个整数
3:对于给定的一个字符串,统计其中数字字符出现的次数
4:递归求和
5:判断是否为C语言的合法标识符
6:奇数求和
7:十六进制转十进制
8:数字统计
9:求10000以内n的阶乘
10:最高的分数
11:计算书费
12:整数的个数
13:整数的立方和
14:化验诊断
15:求分数序列和
16:求阶乘的和
17:打印完数
18:数组逆序重放
19:与7无关的数
20:骑车与走路
1:A+B Problem
描述
Calculate a + b
输入
Two integer a,b (0 ≤ a,b ≤ 10)
输出
Output a + b
样例输入
1 2
样例输出
3
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 = sc.nextInt();
System.out.println(a+b);
sc.close();
}
}
2:输出第二个整数
描述
输入三个整数,把第二个输入的整数输出。
输入
只有一行,共三个整数,整数之间由一个空格分隔。整数是32位有符号整数。
输出
只有一行,一个整数,即输入的第二个整数。
样例输入
123 456 789
样例输出
456
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 = sc.nextInt();
int c = sc.nextInt();
System.out.println(b);
sc.close();
}
}
3:对于给定的一个字符串,统计其中数字字符出现的次数
描述
对于给定的一个字符串,统计其中数字字符出现的次数
输入
输入数据有多行,第一行是一个整数n,表示测试实例的个数,后面跟着n行,每行包括一个由字母和数字组成的字符串。
输出
对于每个测试实例,输出该串中数值的个数,每个输出占一行。
样例输入
2
asdfasdf123123asdfasdf
asdf111111111asdfasdfasdf
样例输出
6
9
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
sc.nextLine();
for (int i = 0; i < n; i++) {
String s = sc.nextLine();
System.out.println(count(s));
}
}
static int count(String s) {
int count = 0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) >= '0' && s.charAt(i) <= '9') {
count++;
}
}
return count;
}
}
4:递归求和
描述
递归是一种非常有效的程序设计方法,应用相当广泛,递归求和就是其中的一种。现在定义数列通项An = n * n,给定一个整数n(1 <= n <= 1000),要你求前n项和Sn,即Sn = 1 * 1 + 2 * 2 + ... + n * n。要求使用递归的方法进行计算。
输入
输入只有一行,包括一个整数n,表示要求的项数。
输出
输出只有一行,为一个整数Sn,表示对应的前n项和。
样例输入
7
样例输出
140
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int Sn = 0;
int a;
Scanner sc = new Scanner(System.in);
System.out.println("输入n:");
int n = sc.nextInt();
for (int i = 0; i <= n; i++) {
a = i * i;
Sn = Sn + a;
}
System.out.println(Sn);
}
}
5:判断是否为C语言的合法标识符
描述
C语言中的合法标识符的定义为:以下划线或字母开头的字母数字串(含下划线)。
完成一个程序实现对输入的n个字符串进行判定,是否为C语言的合法标识符。如果是则输出1,不是则输出0
输入
输入的第一行为一个数字,表明有几个输入字串。
后面每一行为一个长度不超过80的字符串。
输出
对所有输入的字符串进行判断,是合法标识符则输出1,回车。否则输出0,回车。
样例输入
5
hello_world
my god
i
_stdio
008A
样例输出
1
0
1
1
0
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();// 输入有几个输入字串。
int[] id = new int[m];// 定义一个数组。
sc.nextLine();// 遇到回车停止。
for (int i = 0; i < m; i++) {
String s = sc.nextLine();// 输入字符串。
char s1 = s.charAt(0);// s1为字符类型,s1为输入字符串s的第一个字符。
char s2[] = s.toCharArray();// 将字符串对象中的字符转换为一个字符数组s2。
boolean c = true;// 赋值c为true.
for (int t = 0; t < s.length(); t++) {
if (s2[t] == ' ') {
c = false;
}
}
if ((s1 == '_' || (s1 >= 'a' && s1 <= 'z') || (s1 >= 'A' && s1 <= 'Z'))
&& c) {
id[i] = 1;
} else
id[i] = 0;
}
for (int n = 0; n < m; n++) {
System.out.println(id[n]);
}
}
}
6:奇数求和
描述
计算非负整数 m 到 n(包括m 和 n )之间的所有奇数的和,其中,m 不大于 n,且n 不大于300。例如 m=3, n=12, 其和则为:3+5+7+9+11=35。
输入
两个数 m 和 n,两个数以一个空格分开,其中 0 <= m <= n <= 300 。
输出
输出一行,包含一个整数,表示m 到 n(包括m 和 n )之间的所有奇数的和。
样例输入
7 15
样例输出
55
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
String ss[] = s.split(" ");
int m = Integer.parseInt(ss[0]); // String转为Int类型
int n = Integer.parseInt(ss[1]); // String转为Int类型
int Sn = 0;
for (int i = m; i <= n; i++) {
if (i % 2 == 1)
Sn += i;
}
System.out.println(Sn);
}
}
7:十六进制转十进制
描述
将十六进制数转换成十进制数
输入
第一行有一个整数T,表示共有T组数据
接下来T行,每一行为一个16进制无符号正整数,位数不超过8位,数中的a-f均为大写字母,数前没有多余的0
输出
输出共T行,每一行是一组数据的十进制表示,数字前不得有多余的0。
十进制数小于2^31
样例输入
4
A
F
FFFE
10001
样例输出
10
15
65534
65537
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++) {
System.out.println(Integer.parseInt(sc.next(), 16));
}
}
}
8:数字统计
描述
输入n个整数,统计每个数出现的次数.
输入
第一行是一个整数n(1<=n<=1000),接下来n行每行一个整数.
输出
第一行输出总共有多少个不同的整数.
接下来每行输出一个整数及这个整数出现的次数,用空格分隔.
输出的整数的顺序与它们在输入中第一次出现的顺序一致(即在输入中先出现的数,也会在输出中先出现)
样例输入
5
3
2
1
2
样例输出
3
2 3
3 1
1 1
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int a = cin.nextInt();
int[] b = new int[a];
int[] s = new int[1000000];
for (int i = 0; i < a; i++) {
b[i] = cin.nextInt();
s[b[i]]++;
}
StringBuffer ss = new StringBuffer();
int count = 0;
for (int i = 0; i < a; i++) {
if (s[b[i]] > 0) {
ss.append(b[i] + " " + s[b[i]] + "\n");//出现的数字+"空格"+出现次数
s[b[i]] = 0;
count++;
}
}
System.out.println(count);//输出有多少个数
System.out.println(ss);
}
}
9:求10000以内n的阶乘
描述
求10000以内n的阶乘。
输入
只有一行输入,整数n(0<=n<=10000)。
输出
一行,即n!的值。
样例输入
100
样例输出
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
BigInteger p = new BigInteger("1");
for (int i = 1; i < n + 1; i++) {
p = p.multiply(new BigInteger(i + ""));
}
System.out.println(p);
}
}
10:最高的分数
描述
孙老师讲授的《计算概论》这门课期中考试刚刚结束,他想知道考试中取得的最高分数。因为人数比较多,他觉得这件事情交给计算机来做比较方便。你能帮孙老师解决这个问题吗?
输入
输入两行,第一行为整数n(1 <= n < 100),表示参加这次考试的人数.第二行是这n个学生的成绩,相邻两个数之间用单个空格隔开。所有成绩均为0到100之间的整数。
输出
输出一个整数,即最高的成绩。
样例输入
5
85 78 90 99 60
样例输出
99
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();//输入数量
int max = -1;
for (int i = 0; i < n; i++) {
int grade = sc.nextInt();//输入成绩
if (grade > max)
max = grade;
}
System.out.println(max);
}
}
11:计算书费
描述
下面是一个图书的单价表:
计算概论 28.9 元/本
数据结构与算法 32.7 元/本
数字逻辑 45.6元/本
C++程序设计教程 78 元/本
人工智能 35 元/本
计算机体系结构 86.2 元/本
编译原理 27.8元/本
操作系统 43 元/本
计算机网络 56 元/本
JAVA程序设计 65 元/本
给定每种图书购买的数量,编程计算应付的总费用。
输入
输入第一行包含一个正整数k(0<k<100),表示有k组测试数据;接下来k行,每行包含一组测试数据。每组测试数据包含10个整数(大于等于0,小于等于100),分别表示购买的《计算概论》、《数据结构与算法》、《数字逻辑》、《C++程序设计教程》、《人工智能》、《计算机体系结构》、《编译原理》、《操作系统》、《计算机网络》、《JAVA程序设计》的数量(以本为单位)。每两个整数用一个空格分开。
输出
对于每组测试数据,输出一行。该行包含一个浮点数f,表示应付的总费用。精确到小数点后两位。
可用printf("%.2f\n", sum)来输出sum的值,并精确到小数点后两位。
样例输入
2
1 5 8 10 5 1 1 2 3 4
3 5 6 3 100 1 1 0 1 0
样例输出
2140.20
4427.80
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double[] p = { 28.9, 32.7, 45.6, 78, 35, 86.2, 27.8, 43, 56, 65 };
int k = sc.nextInt();// 输入k组测试数据
for (int i = 0; i < k; i++) {
double sum = 0;
for (int j = 0; j < 10; j++) { // 0<=购买数量<=100
sum += p[j] * sc.nextInt();// 总价=各单价*各购买数量
}
System.out.printf("%.2f\n", sum);
}
}
}
12:整数的个数
描述
给定k(1< k < 100)个正整数,其中每个数都是大于等于1,小于等于10的数。写程序计算给定的k个正整数中,1,5和10出现的次数。
输入
输入有两行:第一行包含一个正整数k,第二行包含k个正整数,每两个正整数用一个空格分开。
输出
输出有三行,第一行为1出现的次数,,第二行为5出现的次数,第三行为10出现的次数。
样例输入
5
1 5 8 10 5
样例输出
1
2
1
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int count1 = 0, count2 = 0, count3 = 0;
int k = sc.nextInt();// 输入k组测试数据
for (int i = 0; i < k; i++) {
int n = sc.nextInt();// 输入k个正整数,每两个正整数用一个空格分开
if (n == 1)
count1++; // 1出现次数
else if (n == 5)
count2++; //
else if (n == 10)
count3++;
}
System.out.println(count1 + "\n" + count2 + "\n" + count3);// 按行依次输出1,5,10出现的次数
}
}
13:整数的立方和
描述
给定一个正整数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 Sn = 0;
int k = sc.nextInt();// 输入正整数k
for (int i = 1; i <= k; i++) {
Sn += i * i * i;
}
System.out.println(Sn);
}
}
14:化验诊断
描述
下表是进行血常规检验的正常值参考范围,及化验值异常的临床意义:
给定一张化验单,判断其所有指标是否正常,如果不正常,统计有几项不正常。化验单上的值必须严格落在正常参考值范围内,才算是正常。正常参考值范围包括边界,即落在边界上也算正常。
输入
输出
对于每组测试数据,输出一行。如果所有检验项目正常,则输出: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();// 输入正整数k,表示有k组测试数据
for (int i = 1; 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 ("female".equals(sex)) {// 女
if (HGB < 110 || HGB > 150) {
n++;
}
if (HCT < 36 || HCT > 40) {
n++;
}
}
}
if (n == 0)
System.out.println("normal");
else
System.out.println(n);
}
}
}
15:求分数序列和
描述
有一个分数序列 2/1,3/2,5/3,8/5,13/8,21/13,.... 求这个分数序列的前n项之和。
输入
输入有一行:正整数n。
输出
输出有一行:分数序列的和(浮点数,精确到小数点后4位)。
可以printf("%.4f\n", a)输出浮点数并精确到小数点后4位。
样例输入
99
样例输出
160.4849
提示
最好在程序中使用双精度浮点数(double)记录求得的和。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();// 输入正整数n
double a = 2, b = 1, sum = 0;
for (int i = 0; i < n; i++) {
sum += a / b;
a = a + b;
b = a - b;
}
System.out.printf("%.4f\n", sum);
}
}
16:求阶乘的和
描述
给定正整数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();// 输入正整数n,(1 < n < 12)
long sum = 0;
if (n < 12 && n > 1)
for (int i = 1; i <= n; i++) {
sum += jiecheng(i);
}
System.out.println(sum);
}
static long jiecheng(int k) {
long n = 1;
for (int i = 1; i <= k; i++)
n *= i;
return n;
}
}
17:打印完数
描述
一个数如果恰好等于它的因子之和,这个数就成为“完数”。例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。编程序打印出1000之内(包括1000)所有的完数,并按如下格式输出其所有因子:
6 its factors are 1,2,3
输入
无输入
输出
输出1000以内所有的完数及其因子,每行一个完数。
public class Main {
public static void main(String[] args) {
for (int i = 2; i < 1001; i++) {// 打印出1000之内(包括1000)所有的完数
if (ws(i)) {// 是完数
System.out.println(i + " its factors are " + yz(i));
}
}
}
static Boolean ws(int a) {
int sum = 1;
for (int i = 2; i < a; i++) {
if (a % i == 0) {
sum += i;
}
}
if (sum == a) {
return true;
}
return false;
}
static String yz(int a) {
StringBuffer s = new StringBuffer("1,");
for (int i = 2; i < a; i++) {
if (a % i == 0) {
s.append(i + ",");
}
}
return s.substring(0, s.length() - 1);// 返回String字符串
}
}
18:数组逆序重放
描述
将一个数组中的值按逆序重新存放。例如,原来的顺序为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 n = sc.nextInt();// 输入元素个数n
int[] b = new int[n];
for (int i = 0; i < n; i++) {
b[i] = sc.nextInt();
}
for (int j = 0; j < n; j++) {
if (j == n - 1)
System.out.print(b[n - j - 1]);
else
System.out.print(b[n - j - 1] + " ");
}
}
}
19:与7无关的数
描述
一个正整数,如果它能被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();// 输入n
int sum = 0;
for (int i = 1; i <= n; i++)
if (!xg(i))// 如果不是7的相关数
sum += i * i;
System.out.println(sum);
}
static Boolean xg(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;
}
}
20:骑车与走路
描述
在北大校园里,没有自行车,上课办事会很不方便.但实际上,并非去办任何事情都是骑车快,因为骑车总要找车、开锁、停车、锁车等,这要耽误一些时间.假设找到自行车,开锁并车上自行车的时间为27秒;停车锁车的时间为23秒;步行每秒行走1.2米,骑车每秒行走3.0米.请判断走不同的距离去办事,是骑车快还是走路快.
输入
第一行为待处理的数据的数量n
其后每一行整数为一次办事要行走的距离,单位为米.
输出
对应每个整数,如果骑车快,输出一行"Bike";如果走路快,输出一行"Walk";如果一样快,输出一行"All".
样例输入
4
50
90
120
180
样例输出
Walk
Walk
Bike
Bike
import java.util.Scanner;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();// 输入待处理的数据的数量n
double x, wt, bt;
ArrayList<String> s = new ArrayList<String>();
for (int i = 0; i < n; i++) {
x = sc.nextInt();
wt = (x / 1.2);
bt = (x / 3.0) + 50;
if (wt < bt)
s.add("Walk");
if (wt > bt)
s.add("Bike");
if (wt == bt)
s.add("All");
}
Object[] obj = s.toArray();// 集合转为数组
for (int j = 0; j < obj.length; j++)
System.out.println(obj[j]);
}
}