Java第四次平时作业

1.统计字符个数

【问题描述】

输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。并打印出来。

【输入形式】

Please input a sentence:
【输出形式】

The number of numbers is:

The number of English letters is:

The number of blank space is:

The number of other characters is:

【输入样例】

This is my 1st JAVA code!

【输出样例】

The number of numbers is: 1

The number of English letters is: 18

The number of blank space is: 5

The number of other characters is: 1

【代码参考】

import java.util.Scanner;

public class Chars {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("Please input a sentence:");
        char a='0';// a__97  A__65  z__122  Z__90
        char b=' '; //0-9__48-57  ' '__32
//
        int as=0, ks=0, ns=0,os = 0;
        String sen = input.nextLine();
        char[] senC = sen.toCharArray();
        for( char c :senC){  //找到他们对应的askll码进行比较,可以判断出当前字符是空格或者数字或者字母
            int cc = (int)(c);
            if((cc>=97 && cc<=122) ||(cc>=65 && cc<=90)){
                as+=1;
            }else if(cc==32){ // 空格的askll码为32
                ks+=1;
            }else if(cc>=48 && cc<=57){
                ns+=1;
            }else {
                os+=1;
            }
        }
        System.out.println("The number of numbers is: "+ns);
        System.out.println("The number of English letters is: "+as);
        System.out.println("The number of blank space is: "+ks);
        System.out.println("The number of other characters is: "+os);
    }
}

2.数字移位

【问题描述】
从键盘输入10个整数,存放在一个数组中,然后使数组中的所有整数整体向后移动m个位置,最后m个数变成最前面的m个数,并输出移动后的结果。m从键盘输入。
【输入形式】
输入10个整数,每个整数间用空格分隔,回车。然后输入整数m。
【输出形式】
首先输出数组中的10个元素,然后输出后移m位以后的数组所有元素。
【输入输出样例】
Please input 10 numbers:
1 2 3 4 5 6 7 8 9 10
Your numbers are:
1 2 3 4 5 6 7 8 9 10
Please input m:
3
The new numbers are:
8 9 10 1 2 3 4 5 6 7

【参考代码】

import java.util.Scanner;

public class GoBack {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int[] ori = new int[10];
        System.out.println("Please input 10 numbers:");
        for(int i=0; i<10;i++){
            ori[i] = input.nextInt();
        }
        System.out.println("Your numbers are:");
        for (int ii :ori){
            System.out.printf(ii+" ");
        }
        System.out.println("");
        System.out.println("Please input m:");
        int m = input.nextInt();
        System.out.println("The new numbers are:"); 
        //要得到最终结果实际上不用真的对数组元素进行移动, 只需要控制输出的起始位置即可
        for (int i =10- m; i<10; i++ ){
            System.out.printf(ori[i]+" ");
        }
        for (int i =0; i<10-m; i++){
            System.out.printf(ori[i]+" ");
        }
    }
}

3.回文数

【问题描述】所谓“回文数”是指具有如下性质的整数:一个整数,当它的各位数字逆序排列,形成的整数与原整数相同,这样的数称为回文数。例如,素数11,373,其各位数字对换位置后仍然为11,373,因此这两个整数均为回文数。编写程序,接收控制台输入的两个整数a、b,输出a到b之间(包括a和b)的所有回文数
【输入形式】控制台输入两个整数a和b(必有a<b),以空格分隔。
【输出形式】输出有若干行,每行有一个a和b之间的回文数。输出各行上的数字不重复,且从小至大依次按序输出。
【样例输入】3 120
【样例输出】
3
4
5
6
7
8
9
11
22
33
44
55
66
77
88
99
101
111

【参考代码】

import java.util.Scanner;

public class huiwen {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int a = input.nextInt();
        int b = input.nextInt();
        for(int i=a; i<=b; i++){
            if(nixu(i)){
                System.out.println(i);
            }
        }
    }

    //判断 n 是不是回文数
    public static Boolean nixu(int n){ 
        String ni = new String();
        int m = n; //用m保留n的值
        while (n!=0){ //用whlie和字符串不断得到n的最后一位,并作为字符串ni的下一位,
                 // 这样最终得到的字符串ni就是n的逆序
            ni += n%10;
            n = n/10;
        }
        n = Integer.parseInt(ni); //得到ni的int类型,懒得再申请一个int的数字,
                                    // 所以重复利用了n
        if(m==n){
            return true;
        } else
            return false;
    }

}

4.删数

【问题描述】输入一个高精度的大正整数S(S最长可达240位),去掉其中任意N位数字后剩下的数字按原次序组成一个新的正整数S'。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数S'最小。
【输入形式】输入有两行:
1.第一行是大整数S。其中S最长可达240位。
2.第二行是整数N。S、N均以非0数字开头。
【输出形式】输出有一行,是在S中删除N位后所得的最小数字S'。
【样例输入1】
178543
4
【样例输出1】13

【样例输入2】
1002
1
【样例输出2】002

【参考代码】

import java.util.Scanner;
public class DeleNum {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        String s = input.next(); //即使0在最开始也要输出,所以可以考虑用字符串的形式得到大数
        int sl = s.length();  // 大数的长度 sl
        int n = input.nextInt();  //要删去的个数
        char[] num = s.toCharArray(); //将大数的每一位都转化成数组里面的一个元素
        for(int j=0;j<n; j++) {
            for (int i=0; i<sl-1 ;i++){
                if(num[i]>num[i+1] ){
                   for (int p=i; p<sl-1;p++){ // 发现一个前面比后面大的,就移位,相当于删除了该数;
                       num[p] =num[p+1];
                   }
                    break; //删掉了一次之后就要退出循环重新判断
                }
            }
            }
        for(int k=0;k<sl-n ;k++ ){  //只输出 sl-n位,因为并没有将字符个数真正的减少,而是被后面的覆盖,
                                      //所以前面的(sl-n)位得到的是应该输出的数
            if(num[k] > 0){
                System.out.print(num[k]);
            }
        }
    }
}

第四题可以只用一次while循环,删除掉一次后改变i的值,回到上次循环中,因为删掉某个数后,留下的数可能仍然比上一个数小,还是要删除掉。同时记录删除的次数,当删除次数达到n时,退出循环。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值