卡码网KamaCoder 25 题

卡码网是一个练习 acm 模式的网站

目录

1. A+B问题I

描述:

进度: 1/25

2. A+B问题II

描述:

进度: 2/25

3. A+B问题III

描述:

进度: 3/25

4. A+B问题IV

描述:

进度: 4/25

5. A+B问题VII

描述:

进度: 5/25

6. A+B问题VIII

描述:

进度: 6/25

7. 平均绩点

描述:

进度: 7/25

8. 摆平积木

描述:

进度: 8/25

9. 奇怪的信

描述:

进度: 9/25

10. 运营商活动

描述:

进度: 10/25

11. 共同祖先

描述:

进度: 11/25

12. 打印数字图形

描述:

进度: 12/25

13. 镂空三角形

描述:

进度: 13/25

14. 句子缩写

描述:

进度: 14/25

15. 神秘字符

描述:

进度: 15/25

16. 位置互换

描述:

进度: 16/25

17. 出栈合法性

描述:

进度: 17/25

18. 链表的基本操作

描述:

进度: 18/25

19. 单链表反转

描述:

进度: 19/25

20. 删除重复元素

描述:

进度: 20/25

21. 构造二叉树

描述:

进度: 21/25

22. 二叉树的遍历

描述:

进度: 22/25

23. 二叉树的高度

描述:

进度: 23/25

24. 最长公共子序列

描述:

进度: 24/25

25. 最爱的城市

描述:

进度: 25/25


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;
            }
            
            //奖励的金钱
           
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值