求助各位大神这几道咋写,小白一个1、编程对抗赛
  时间限制: 1000ms   内存限制: 128M
描述
为提升技术能力,某公司决定组织一次编程对抗赛,选取X名(X<=30)人员分为两组,进行编程对抗竞赛。
为确保两组人员水平均等,该公司拟根据各人员的工号随机分为两组,要求两组人员工号数字之和相等,但并不要求两组人员数量相等。
例如:给定如下人员工号:
3809 3810 3811 3812
则可以将上述人员分为满足条件的两组(3809 3812)和(3810 3811)。
如下人员工号,则不能满足分组要求
3809 3810 3811 3813 (不能分为两组,其工号数字之和相等)
输入
第1行是测试数据的组数,假设为N
第2行到N+1行,每行是X(X<=30)名人员的工号,工号>=3800, 工号<=4000
输出
每组测试数据输出TRUE或FALSE,表示能够/不能够分为满足条件的两组。
样例输入1 复制
2
3809 3810 3811 3812
3809 3810 3811 3813
样例输出1
TRUE
FALSE2、新职场地址
  时间限制: 1000ms   内存限制: 128M
描述
        农业银行软开从航天桥职场迁往海淀区稻香湖职场了!各主流媒体纷纷热烈报道中,某著名媒体使用了3个网站页面进行了专题报道,在这3个页面中均出现了有关软开的地址信息。有某兴趣小组发现他们的用户对这些信息感兴趣,特别是喜欢查询地址信息。
        通过对这3个页面的地址信息进行了分析,发现里面的关键词如下(相关性最大的关键词排前面):
页面1关键词:农业银行软开 钟秀路 稻香湖 海淀区 北京市
页面2关键词:海淀区 稻香湖 农业银行软开
页面3关键词:北京市 农业银行软开 稻香湖
        通过对某些用户的查询信息进行分析,发现里面的关键词如下(相关性最大的关键词排前面):
用户A查询关键词:农业银行软开 稻香湖
用户B查询关键词:北京市 农业银行软开
        该小组决定做一个应用程序,根据用户对农业银行软开地址信息的查询关键词,按照关联度顺序列出相关的页面。
        该小组设计的查询算法思路如下:
1、每个页面最多提取10个关键词(可以少于10个),按照顺序为每个关键词倒序设置权重,排在第1的关键词权重为10,排在第2的关键词权重为9……以此类推,排在第10的关键词权重为1。每个用户查询也是最多提取10个关键词,其关键词的权重设置同页面。
2、用户查询出现的关键词中,通过计算每个关键词在查询和页面中的权重乘积,然后加总,来决定页面列出的顺序。例如用户A的查询“农业银行软开 稻香湖”,这3个页面的权重乘积计算结果分别是172(10*10+9*8)、161(10*8+9*9)和162(10*9+9*8)。类似,用户B的查询计算结果分别是150(10*6+9*10)、72(9*8)和181(10*10+9*9)。
3、根据上述计算结果倒序,确定返回给用户A的页面顺序是页面1、页面3和页面2;返回给用户B的页面顺序是页面3、页面1和页面2。
输入
1、第一行是页面数量;
2、第二行是查询数量;
2、从第三行输入数据开始,页面按P1、P2等顺序编号,最多有100个页面;编号后接1个空格,空格之后是关键词列表;
3、页面输入结束后的下一行就是查询输入;查询按Q1、Q2等顺序编号,最多有100个查询;编号后接1个空格,空格之后是关键词列表;
4、每个页面或查询的关键词,允许的最大字符数为20(汉字,编码UTF8);关键词以空格间隔;如果关键词有英文,则不区分大小写;关键词不包含空格;
5、如果查询关键词有相同的,则只保留顺序在前的第1个关键词。例如用户查询“农业银行 稻香湖 农业银行”,等同于查询“农业银行 稻香湖”;查询“农业银行 稻香湖 稻香湖”等同于查询“农业银行 稻香湖”。
输出
1、按照查询顺序输出。每个查询输出一行,内容是排序后的返回页面列表,返回页面之间用空格间隔;
2、如果返回页面有多个,最多返回5个。也就是返回页面数量<=5;
3、如果多个页面的权重计算结果相同,则返回结果按照页面的编号顺序列出;
4、如果某页面权重计算结果为0,则不返回;
5、如果所有页面权重计算结果为0,向用户返回“无查询结果”。请你根据上述思路和要求编写处理程序。
样例输入1 复制
8
5
P1 农业银行软开 钟秀路 稻香湖 海淀区 北京市
P2 钟秀路 稻香湖 海淀区 北京市
P3 北京市 海淀区 农业银行软开
P4 农业银行软开 稻香湖 海淀区
P5 稻香湖 农业银行软开
P6 海淀区 钟秀路 钟秀路和地锦路交叉路口
P7 海淀区 钟秀路 钟秀路和地锦路交叉路口
P8 海淀区 稻香湖 温阳路地铁 农业银行软开
Q1 北京市 农业银行软开
Q2 海淀区 稻香湖 农业银行软开
Q3 钟秀路和地锦路交叉路口 钟秀路
Q4 农业银行 西城区
Q5 海淀区 稻香湖 农业银行软开 稻香湖 海淀区 稻香湖
样例输出1
P3 P1 P4 P5 P2
P4 P8 P1 P5 P2
P6 P7 P2 P1
无查询结果
P4 P8 P1 P5 P23、比特精灵
  时间限制: 2000ms   内存限制: 128M
描述
比特世界里生存着比特精灵,它们负责排成一列纵队来形成一个一维的显示阵列。
这些比特精灵可以自如的控制自己的身体,使其发光或熄灭,分别记为L(发光)和D(熄灭)。
比特精灵们胆小而又敏感,当它们排成显示阵列的时候,会通过观察其他精灵来决定自己的行为。
由于精灵只能看到前面,所以它后方精灵的状态不会影响它的行为。
在它能看到的其他精灵中,当且仅当它前面那个精灵发光的时候,它才会改变发光状态。
排在第一位的比特精灵看不到其他小伙伴,因此可以自由的改变发光状态。
每一个比特时间内,只能有一个精灵改变一次状态。
给出一个显示阵列的起始状态和目标状态,请你编写程序,指挥比特精灵,使得从起始状态转变为目标状态所用的比特时间最短。
输入
第一行有一个整数N(N<50),表示有N组测试数据。
每一组测试数据三行,包括阵列长度M(M<20),起始阵列状态,目标阵列状态,。
输出
对于每组测试数据,第一行输出最短的时间数T。后面T+1行输出起始状态,转变的每一个步骤和目标状态。
样例输入1 复制
2
2
DL
DD
3
LLL
DDD
样例输出1
3
DL
LL
LD
DD
5
LLL
DLL
DLD
LLD
LDD
DDD4、装修职场
   时间限制: 2000ms   内存限制: 128M
描述
某公司装修职场。
设计师要求一个区域规划九个工位,三乘三排列。
每个工位铺九块地砖,也是三乘三排列。
地砖有九种,分别记做W、E、T、U、D、H、X、B、M。
设计师要求每个区域的每行每列都有九种地砖,不能重复也不能遗漏;而且每个工位也有九种地砖,不能重复也不能遗漏。
在设计师指导下,瓦工师傅将一个区域的部分地砖铺好了。然后设计师因其他紧急工作被抽调走了。
请你编写程序来指导瓦工师傅将剩下的地砖铺好。
输入
第一行有一个整数N(N<50),表示有N组测试数据。
每一组测试数据有九行九列,O表示这块地砖还没有铺,字母W、E、T、U、D、H、X、B、M表示该位置已铺地砖类型。
测试数据间用空行分割。
输出
对于每组测试数据,输出九行九列的正确铺法。
每组输出之间用空行分割。
样例输入1 复制
2
OOOOWBOHO
OOOOOXOTW
OBMOOOOOO
OODOOMOOE
UOOOOODOH
OTBOOOOWO
OOOOOEOOO
OOOXOOODO
OWUDOOOOBODOHOMTOO
OOOOEOOXO
OOOOOOUOO
MHOOOXOOW
OOBOOOODO
OOXOBDOOU
OOMOOOOOO
WOOOHTOOO
OOOOOOMUB
样例输出1
TXEUWBMHD
DUHMEXBTW
WBMTHDUEX
XHDWBMTUE
UMWEXTDBH
ETBHDUXWM
HDXBUEWMT
BETXMWHDU
MWUDTHEXBUDWHXMTBE
BMTUEWDXH
HXEDTBUWM
MHDEUXBTW
TUBWMHEDX
EWXTBDHMU
XEMBDUWHT
WBUMHTXED
DTHXWEMUB

解决方案 »

  1.   

    只看了第一题 后面的不看了import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;public class Test{

    public static void main(String[] args) {

    run();
    }

    public static void run() {
    Scanner in=new Scanner(System.in);
    System.out.println("请输入测试数据的组数");
    int count=Integer.parseInt(in.nextLine());
    List<String> nums=new ArrayList<String>();
    System.out.println("请输入测试数据 以空格隔开");
    for (int i = 0; i < count; i++) {
    //编号 空格 编号
    String n=in.nextLine();
    nums.add(n);
    }

    for (int i = 0; i < nums.size(); i++) {
    System.out.println(canSolution(stringToArray(nums.get(i))));
    }

    }

    public static int[] stringToArray(String str) {

    String nums[]=str.split(" ");
    int result[]=new int[nums.length];
    for (int i = 0; i < nums.length; i++) {
    result[i]=Integer.parseInt(nums[i]);
    }

    return result;
    }

    //数组存放员工编号  要求分成两组 两组编号之和相等 == 找到一组和等于数组之和的一半的子数组
    public static boolean canSolution(int arr[]) {
    int sum=0;
    for (int i = 0; i < arr.length; i++) {
    sum += arr[i];
    }
    sum = sum >>1;

    int left=0,right=-1; //游离窗口的左右游标
    int target=0; //  
    while(left<arr.length) {

    if(target == sum) {
    return true;
    }
    if((target < sum) && (right+1 <arr.length)) {
    target += arr[++right];
    }else {
    target -= arr[left++];
    }
    }

    return false;
    }

    }