卡码网是一个练习 acm 模式的网站
目录
1. A+B问题I
描述:
你的任务是计算a+b。
输入描述
输入包含一系列的a和b对,通过空格隔开。一对a和b占一行。
输出描述
对于输入的每对a和b,你需要依次输出a、b的和。
如对于输入中的第二对a和b,在输出中它们的和应该也在第二行。
输入示例
3 4
11 40
输出示例
7
51
代码:
import java.lang.*;
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
while(sc.hasNextInt()){
int a=sc.nextInt();
int b=sc.nextInt();
System.out.println(a+b);
}
}
}
进度: 1/25
2. A+B问题II
描述:
计算a+b,但输入方式有所改变。
输入描述
第一行是一个整数N,表示后面会有N行a和b,通过空格隔开。
输出描述
对于输入的每对a和b,你需要在相应的行输出a、b的和。
如第二对a和b,对应的和也输出在第二行。
输入示例
2
2 4
9 21
输出示例
6
30
提示信息
注意,测试数据不仅仅一组。也就是说,会持续输入N以及后面的a和b
代码:
import java.lang.*;
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
while(sc.hasNextInt()){
int numsLen=sc.nextInt();
for(int i=0;i<numsLen;i++){
System.out.println(sc.nextInt()+sc.nextInt());
}
}
}
}
进度: 2/25
3. A+B问题III
描述:
你的任务依然是计算a+b。
输入描述
输入中每行是一对a和b。其中会有一对是0和0标志着输入结束,且这一对不要计算。
输出描述
对于输入的每对a和b,你需要在相应的行输出a、b的和。
如第二对a和b,他们的和也输出在第二行。
输入示例
2 4
11 19
0 0
输出示例
6
30
代码:
import java.lang.*;
import java.util.*;
class Main{
public static void main (String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int a=sc.nextInt();
int b=sc.nextInt();
if(a!=0&&b!=0){
System.out.println(a+b);
}
}
}
}
进度: 3/25
4. A+B问题IV
描述:
你的任务是计算若干整数的和。
输入描述
每行的第一个数N,表示本行后面有N个数。
如果N=0时,表示输入结束,且这一行不要计算。
输出描述
对于每一行数据需要在相应的行输出和。
输入示例
4 1 2 3 4
5 1 2 3 4 5
0
输出示例
10
15
代码:
import java.lang.*;
import java.util.*;
class Main{
public static void main (String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNextInt()){
int num=sc.nextInt();
if(num==0) break;
int sum=0;
for(int i=0;i<num;i++){
sum+=sc.nextInt();
}
System.out.println(sum);
}
}
}
进度: 4/25
5. A+B问题VII
描述:
你的任务是计算两个整数的和。
输入描述
输入包含若干行,每行输入两个整数a和b,由空格分隔。
输出描述
对于每组输入,输出a和b的和,每行输出后接一个空行。
输入示例
2 4
11 19
输出示例
6
30
代码:
import java.util.*;
class Main{
public static void main (String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNextLine()){
System.out.println(sc.nextInt()+sc.nextInt()+"\n");
//System.out.println();
}
}
}
进度: 5/25
6. A+B问题VIII
描述:
你的任务是计算若干整数的和。
输入描述
输入的第一行为一个整数N,接下来N行每行先输入一个整数M,然后在同一行内输入M个整数。
输出描述
对于每组输入,输出M个数的和,每组输出之间输出一个空行。
输入示例
3
4 1 2 3 4
5 1 2 3 4 5
3 1 2 3
输出示例
10
15
6
代码:
import java.util.*;
class Main{
public static void main (String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNextLine()){
int len=sc.nextInt();
for(int i=0;i<len;i++){
int nums=sc.nextInt();
int sum=0;
for(int j=1;j<=nums;j++){
int num=sc.nextInt();
sum=getSum(sum,num);
}
System.out.println(sum);
if(i==len-1) break;
System.out.println("");
}
}
}
public static int getSum(int sum,int num){
return sum+num;
}
}
进度: 6/25
7. 平均绩点
描述:
每门课的成绩分为A、B、C、D、F五个等级,为了计算平均绩点,规定A、B、C、D、F分别代表4分、3分、2分、1分、0分。
输入描述
有多组测试样例。每组输入数据占一行,由一个或多个大写字母组成,字母之间由空格分隔。
输出描述
每组输出结果占一行。如果输入的大写字母都在集合{A,B,C,D,F}中,则输出对应的平均绩点,结果保留两位小数。否则,输出“Unknown”。
输入示例
A B C D F
B F F C C A
D C E F
输出示例
2.00
1.83
Unknown
代码:
import java.util.*;
public class Main{
public static void main (String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNextLine()){
String[] nums=sc.nextLine().split(" ");
double sum=0;
boolean flag=true;
for(String ch:nums){
switch(ch){
case "A":
sum+=4;
break;
case "B":
sum+=3;
break;
case "C":
sum+=2;
break;
case "D":
sum+=1;
break;
case "F":
sum+=0;
break;
default:
flag=false;
break;
}
}
//三元运算符
System.out.println(flag ? String.format("%.2f",sum/nums.length):"Unknown");
}
sc.close();
}
}
进度: 7/25
8. 摆平积木
描述:
小明很喜欢玩积木。一天,他把许多积木块组成了好多高度不同的堆,每一堆都是一个摞一个的形式。然而此时,他又想把这些积木堆变成高度相同的。但是他很懒,他想移动最少的积木块来实现这一目标,你能帮助他吗?
示例图像
输入描述
输入包含多组测试样例。每组测试样例包含一个正整数n,表示小明已经堆好的积木堆的个数。
接着下一行是n个正整数,表示每一个积木堆的高度h,每块积木高度为1。其中1<=n<=50,1<=h<=100。
测试数据保证积木总数能被积木堆数整除。
当n=0时,输入结束。
输出描述
对于每一组数据,输出将积木堆变成相同高度需要移动的最少积木块的数量。
在每组输出结果的下面都输出一个空行。
输入示例
6
5 2 4 1 7 5
0
输出示例
5
代码:
import java.util.*;
public class Main{
public static void main (String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNextLine()){
int n=sc.nextInt();
if(n==0) break;
int sum=0;
int avg=0;
int res=0;
//用数组存放这一行的结果
int[] nums=new int[n];
for(int i=0;i<n;i++){
nums[i]=sc.nextInt();
sum+=nums[i];
}
avg=sum/n;
for(int i=0;i<n;i++){
res+=(nums[i]>avg?nums[i]-avg:0);
}
System.out.println(res);
System.out.println();
}
}
}
进度: 8/25
9. 奇怪的信
描述:
有一天, 小明收到一张奇怪的信, 信上要小明计算出给定数各个位上数字为偶数的和。
例如:5548,结果为12,等于 4 + 8 。
小明很苦恼,想请你帮忙解决这个问题。
输入描述
输入数据有多组。每组占一行,只有一个整整数,保证数字在32位整型范围内。
输出描述
对于每组输入数据,输出一行,每组数据下方有一个空行。
输入示例
415326
3262
输出示例
12
10
代码:
import java.util.*;
public class Main{
public static void main (String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNextInt()){
int num=sc.nextInt();
//String s=new String(num);
String s=num+"";
int res=0;
for(int i=0;i<s.length();i++){
int t=s.charAt(i)-'0';
if(t%2!=0) continue;
else res+=t;
}
System.out.println(res);
System.out.println("");
}
}
}
进度: 9/25
10. 运营商活动
描述:
小明每天的话费是1元,运营商做活动,手机每充值K元就可以获赠1元话费,一开始小明充值M元,问最多可以用多少天? 注意赠送的话费也可以参与到奖励规则中
输入描述
输入包括多个测试实例。每个测试实例包括2个整数M,K(2<=k<=M<=1000)。M=0,K=0代表输入结束。
输出描述
对于每个测试实例输出一个整数,表示M元可以用的天数。
输入示例
2 2
4 3
13 3
0 0
输出示例
3
5
19
提示信息
注意第三组数据「13 3」结果为什么是19呢, 13/3=4,获得4元奖励。 13%3=1,还剩下1元,4+1=5,5元继续参加奖励规则。 5/3=1,获得1元奖励。 5%3=2,剩下2元,1+2=3,3元继续参与奖励规则。 3/3=1,获得1元奖励。 3%3=0,剩下0元,1+0=1。 1元不能参与剩下奖励。所以一共可以使用的天数是 13+4+1+1=19
代码:
import java.util.*;
public class Main{
public static void main (String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNextInt()){
int M=sc.nextInt();
int K=sc.nextInt();
if(M==0&&K==0){
break;
}
//奖励的金钱