发布于 2014-10-21 10:53:33 | 481 次阅读 | 评论: 0 | 来源: 网友投递
这里有新鲜出炉的精品教程,程序狗速度看过来!
华为
华为技术有限公司是一家生产销售通信设备的民营通信科技公司,总部位于中国广东省深圳市龙岗区坂田华为基地。华为的产品主要涉及通信网络中的交换网络、传输网络、无线及有线固定接入网络和数据通信网络及无线终端产品,为世界各地通信运营商及专业网络拥有者提供硬件设备、软件、服务和解决方案。华为于1987年在中国深圳正式注册成立。
1、描述:
实现简易字符串压缩算法:一个长度最大为128的字符串,由字母a-z或者A-Z组成,将其中连续出现2次以上(含2次)的字母转换为字母和出现次数,以达到压缩目的。
运行时间限制: 无限制
内存限制: 无限制
输入:
输入字符串,最大长128
输出:
输入字符串
样例输入: AAAABBBB
样例输出: A4B4
参考答案:
- import java.util.Scanner;
-
- public class Main {
- public static void main(String[] args){
- int count = 1;
- Scanner in = new Scanner(System.in);
- String s = in.next();
- in.close();
- char[] chS = s.toCharArray();
- if (chS.length > 128){
- System.out.println("Length of input string out of bound");
- return;
- }
- StringBuffer compactS = new StringBuffer("");
- compactS.append(chS[0]);
- for (int i = 1; i < chS.length; i++){
- if (chS[i] == chS[i-1]){
- count++;
- }
- else{
- if (count>1){
- compactS.append(count);
- }
- compactS.append(chS[i]);
- count = 1;
- }
- }
- if (count>1){
- compactS.append(count); //这是最后一个字母连续出现的个数
- }
- System.out.println(compactS);
- }
- }
2、竞赛积分猜想 描述:
某公司举办了知识竞赛。题目的计分规则如下: 1.每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前得到的分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。 2.每位选手都有一个起步的分数为10分。?
程序要求:
如果某获胜选手最终得分是X分,如果不让你看比赛过程,请推断出他(她)哪个题目答对了,哪个题目答错了吗?把答对的题目记为1,答错的记为0,则10个 题目的回答情况可以用仅含有1和0的串来表示。例如:0010110011?就是一种可能的情况,10道题目的编号从左到右依次排列。
你的任务是算出满足该得分的所有可能情况,答案之间用|号分隔,并且答案需要进行排序,将答案转换为十进制后数字小的排在前面,即0010110011应该排在1010110011的前面。如果不存在满足该分数的情况,则输出10个0:0000000000
参考答案:
- import java.util.ArrayList;
- import java.util.Scanner;
-
- public class Main {
- private static int finalScore;
- static ArrayList<String> array = new ArrayList<String>();
- public static void main(String[] args){
- Scanner in = new Scanner(System.in);
- finalScore = in.nextInt();
- in.close();
- char[] answer = new char[10];
- judge(10, 0, answer);
-
- for (int i = 0; i < array.size()-1; i++){
- System.out.print(array.get(i));
- System.out.print("|");
- }
- System.out.print(array.get(array.size()-1));
- }
-
- private static void judge(int score, int num, char[] answer) {
- if (num == 10){
- if(score == finalScore){
- String res = new String(answer);
- array.add(res);
- }
- return;
- }
- answer[num] = '1';
- judge(score*2, num+1, answer);
- answer[num] = '0';
- judge(score - num - 1, num+1, answer);
- }
- }
3. 通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。
输入字符串的格式为:“操作数1 运算符 操作数2”,“操作数”与“运算符”之间以一个空格隔开。
补充说明:
1. 操作数为正整数,不需要考虑计算结果溢出的情况。
2. 若输入算式格式错误,输出结果为“0”。
参考答案:
- import java.util.Scanner;
- import java.util.regex.*;
-
- public class Main {
- public static void main(String[] args){
- Scanner in = new Scanner(System.in);
- String x = in.nextLine();
- in.close();
- Pattern p = Pattern.compile("\\d+\\s+[+|-]{1}\\s+\\d+");
- Matcher m = p.matcher(x);
- Boolean bo = m.matches();
- if (!bo){
- System.out.println("0");
- }
- else{
- String[] spli = x.split("\\s");
-
- int a = Integer.parseInt(spli[0]);
- int b = Integer.parseInt(spli[2]);
-
- if(spli[1].equals("+")){
- System.out.println(a+b);
- }
- if(spli[1].equals("-")){
- System.out.println(a-b);
- }
-
- }
- }
- }