零基础学Java语言--第6周编程题

1单词长度(5分)

题目内容:

你的程序要读入一行文本,其中以空格分隔为若干个单词,以‘.’结束。你要输出这行文本中每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如“it’s”算一个单词,长度为4。注意,行中可能出现连续的空格。

输入格式:

输入在一行中给出一行文本,以‘.’结束,结尾的句号不能计算在最后一个单词的长度内。

输出格式:

在一行中输出这行文本对应的单词的长度,每个长度之间以空格隔开,行末没有最后的空格。

输入样例:

It’s great to see you here.

输出样例:

4 5 2 3 3 4

时间限制:500ms内存限制:32000kb

import java.util.Scanner;

public class Main{

    public static void main(String[] args) {
        Scanner in = new Scanner (System.in);

        String word;
        boolean outputflag = false;
        while(true) {
            word = in.next();
            int a = word.indexOf('.');
            if(outputflag) {
               System.out.print(" ");
            }
            if(a != -1) {
                System.out.print(word.length() - 1);
                outputflag = true;
                break;
            }else{
                System.out.print(word.length());
                outputflag = true;
            }
        }
        System.out.println();
    }
}

2GPS数据处理(5分)

题目内容:

NMEA-0183协议是为了在不同的GPS(全球定位系统)导航设备中建立统一的BTCM(海事无线电技术委员会)标准,由美国国家海洋电子协会(NMEA-The National Marine Electronics Associa-tion)制定的一套通讯协议。GPS接收机根据NMEA-0183协议的标准规范,将位置、速度等信息通过串口传送到PC机、PDA等设备。

NMEA-0183协议是GPS接收机应当遵守的标准协议,也是目前GPS接收机上使用最广泛的协议,大多数常见的GPS接收机、GPS数据处理软件、导航软件都遵守或者至少兼容这个协议。

NMEA-0183协议定义的语句非常多,但是常用的或者说兼容性最广的语句只有 G P G G A 、 GPGGA、 GPGGAGPGSA、 G P G S V 、 GPGSV、 GPGSVGPRMC、 G P V T G 、 GPVTG、 GPVTGGPGLL等。

其中$GPRMC语句的格式如下:

$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,A*50

这里整条语句是一个文本行,行中以逗号“,”隔开各个字段,每个字段的大小(长度)不一,这里的示例只是一种可能,并不能认为字段的大小就如上述例句一样。

字段0:$GPRMC,语句ID,表明该语句为Recommended Minimum Specific GPS/TRANSIT Data(RMC)推荐最小定位信息

字段1:UTC时间,hhmmss.sss格式

字段2:状态,A=定位,V=未定位

字段3:纬度ddmm.mmmm,度分格式(前导位数不足则补0)

字段4:纬度N(北纬)或S(南纬)

字段5:经度dddmm.mmmm,度分格式(前导位数不足则补0)

字段6:经度E(东经)或W(西经)

字段7:速度,节,Knots

字段8:方位角,度

字段9:UTC日期,DDMMYY格式

字段10:磁偏角,(000 - 180)度(前导位数不足则补0)

字段11:磁偏角方向,E=东W=西

字段16:校验值

这里,“”为校验和识别符,其后面的两位数为校验和,代表了“$”和“”之间所有字符(不包括这两个字符)的异或值的十六进制值。上面这条例句的校验和是十六进制的50,也就是十进制的80。

提示:运算符的作用是异或。将$和*之间所有的字符做运算(第一个字符和第二个字符异或,结果再和第三个字符异或,依此类推)之后的值对65536取余后的结果,应该和*后面的两个十六进制数字的值相等,否则的话说明这条语句在传输中发生了错误。注意这个十六进制值中是会出现A-F的大写字母的。另外,如果你需要的话,可以用Integer.parseInt(s)从String变量s中得到其所表达的整数数字;而Integer.parseInt(s, 16)从String变量s中得到其所表达的十六进制数字

现在,你的程序要读入一系列GPS输出,其中包含$GPRMC,也包含其他语句。在数据的最后,有一行单独的

END

表示数据的结束。

你的程序要从中找出 G P R M C 语 句 , 计 算 校 验 和 , 找 出 其 中 校 验 正 确 , 并 且 字 段 2 表 示 已 定 位 的 语 句 , 从 中 计 算 出 时 间 , 换 算 成 北 京 时 间 。 一 次 数 据 中 会 包 含 多 条 GPRMC语句,计算校验和,找出其中校验正确,并且字段2表示已定位的语句,从中计算出时间,换算成北京时间。一次数据中会包含多条 GPRMC2GPRMC语句,以最后一条语句得到的北京时间作为结果输出。

你的程序一定会读到一条有效的$GPRMC语句。

输入格式:

多条GPS语句,每条均以回车换行结束。最后一行是END三个大写字母。

输出格式:

6位数时间,表达为:

hh:mm:ss

其中,hh是两位数的小时,不足两位时前面补0;mm是两位数的分钟,不足两位时前面补0;ss是两位数的秒,不足两位时前面补0。

输入样例:

$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,A*50

END

输出样例:

10:48:13

时间限制:500ms内存限制:32000kb

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner (System.in);

        String str, time_str = null;
        int time;
        while(true) {
            str = in.nextLine();    //读入str

            //循环结束条件的判定
            if(str.equals("END")){
                break;
            }

            //校验和计算和比对,查看是否已经定位
            int temp0, temp1, a;
            a = str.indexOf("$GPRMC");
            temp0 = str.indexOf(',');
            temp1 = str.indexOf(',', (temp0+1));
                //没找到"$GPRMC", 没有完成定位,进行下一次循环
            if(a == -1 || str.charAt(temp1+1) == 'V') {
                continue;
            }
                //校验和不正确,进行下一次循环
            temp0 = str.indexOf('$');
            temp1 = str.indexOf('*', (temp0+1));
            char ch1, ch2;
            int text;
            ch1 = str.charAt(temp0 + 1);
            ch2 = str.charAt(temp0 + 2);
            text = ch1 ^ch2;
            for(int i = temp0 + 3; i < temp1; i++){
                ch1 = str.charAt(i);
                if(ch1 == ','){
                    continue;
                }
                text ^= ch1;
            }
            text %= 65536;
            //String my_text_str = String.format("%d", text);
            String text_str = str.substring(temp1+1);
            int text_str16 = Integer.parseInt(text_str, 16);
            boolean textbool = text == text_str16;
            if(textbool){
                //continue;
                //get the time_str
                temp0 = str.indexOf(',');
                temp1 = str.indexOf(',', (temp0+1));
                time_str = str.substring((temp0+1), temp1);
            }


        }

        //output beijing_time
        //assert time_str != null;
        if(time_str != null) {
            time_str = time_str.substring(0, 6);
            time = Integer.parseInt(time_str);
            int hour, minute, second;
            hour = time / 10000;
            minute = (time % 10000) / 100;
            second = time % 100;
            hour += 8;
            if (hour > 24) {
                hour -= 24;
            }
            System.out.println(hour + ":" + minute + ":" + second);
        }
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 首先,要编程,需要具备一定的数基础,掌握算法和数据结构。其次,可以选择一门编程语言,比如C++、Java、Python等,然后通过在线教程、书籍或者视频自。最后,可以自行编写一些小程序,熟悉编程的基本概念和书写规范,加深对编程的理解。 ### 回答2: 零基础编程的入门之路可以从以下几个方面入手: 1. 选择一门编程语言:首先需要选择一门编程语言作为入门的工具,比如Python、Java或C++等。可以根据个人兴趣、应用场景和习资源等因素进行选择。 2. 找到合适的习资源:可以通过网上教程、习网站、视频课程、编程书籍等方式来编程。选择一种适合自己习方式的资源,对初者而言,简单易懂、有实例和练习的教程比较适合。 3. 习基本概念:了解编程语言的基本概念和语法规则,比如变量、数据类型、函数、条件语句、循环等。熟悉这些基本概念是编程基础。 4. 实践和动手编写代码:通过实际动手编写代码来巩固所知识。可以尝试一些简单的编程项目和练习,例如编写一个简单的计算器、创建一个简单的网页等,这样能够让编程概念更加具体化并提高编程能力。 5. 参与编程社区和交流习:加入编程社区,参与讨论和分享自己的习经验。与其他编程爱好者交流,可以互相习和解决问。 6. 持续习和实践:编程是一项需要不断习和实践的技能,持续习新的编程知识和技术。通过解决实际问和参与项目实践,可以巩固所知识,提高编程能力。 总之,零基础编程需要通过选择语言、找到好的习资源、掌握基本概念、实践编写代码、参与社区交流和持续习等途径入手。耐心和坚持是编程的关键,通过不断习和实践,你会逐渐掌握编程技能。 ### 回答3: 要想零基础编程,首先需要选择一门适合初者的编程语言。常见的入门语言有Python和JavaScript,它们具有简洁易懂的语法和广泛的应用领域。在选择语言后,可以通过以下几个步骤开始编程。 第一步,了解基本概念。编程是一种逻辑思维的过程,需要掌握基本的编程概念,如变量、数据类型、条件语句和循环等。可以通过阅读入门教程或者观看相关的在线教视频来习这些概念。 第二步,进行实践。只有在实践中才能真正掌握编程技巧。可以尝试编写简单的程序来解决实际问,例如编写一个计算器或者打印一段文字。在实践过程中,遇到问时可以利用搜索引擎或者参考编程论坛来寻求帮助。 第三步,参加编程课程或培训。参加编程课程可以加速习的进程,获得专业指导和反馈。可以选择线上或线下的编程课程,根据自己的兴趣和时间进行选择。 第四步,积极参与编程社区。与其他习者和专业人士进行互动交流,可以加速自己的习。可以参加一些编程交流群、论坛或者社交媒体群组,与其他人分享习心得和问。 第五步,勤于练习和总结。编程是一项需要不断练习和摸索的技能,要保持持续习的动力。可以尝试解决一些编程挑战或者参与开源项目,不断提升自己的实战能力。 总之,零基础编程需要坚持习和练习,并结合实践来巩固所知识。只要有兴趣和耐心,任何人都可以成为一名优秀的程序员。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

比巧克力巧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值