1. 在从1到n这n个连续自然数中,任意取出n-1个数放在一个含有n-1个项的数组中(任意顺序排列),请你用java或C编写一个函数,用以找到所缺的那个数。要求该算法满足时间复杂度为o(n),空间复杂度为常数。
    
2. 对于上题的算法,能否扩充到支持:在从1到n这n个连续自然数中,任意取出n-2个数放在一个含有n-2个项的数组中(任意顺序排列)?如果不能够,请找出一个新算法:满足时间复杂度为o(n),空间复杂度为常数。
     
3. 请你用java或C编写一个函数,用以寻找一个单向链表的中间结点,要求该算法尽量少的遍历列表。
现有两个表:
   1. 用户信息表(UserInfo)包括UID(用户ID,主键)、UNAME(姓名)、USALARY(工资)、UDEPTNO(所在部门编号)以及UPOS(级别)
   2. 印章表(SealInfo)包括SEALID(印章编号,主键)、SEALNAME以及SEALDATA
   请设计一个用户和印章关系表,做到: 
       a. 一个用户可以拥有多个印章;
       b. 一个印章可以被多个用户同时拥有;
       c. 一个印章可以被一个或多个部门同时拥有.
   然后完成以下操作:
   1. 删除印章(SEALID=A)所需的SQL语句及步骤。
   2. 请用SQL语句查询印章(SEALID=C)可以被那些用户或部门(编号)使用。
   3. 请用SQL语句查询用户(UID=C)可以使用的所有印章。

解决方案 »

  1.   

    Array arr=new Array[10];
    for(int i=0;i<10;i++){
    arr[i]=10*math.random();
      

  2.   

    第1题public int Test(int[] a){ 
        int i=(1+a.length+1)*(a.length+1)/2; 
        int k=0; 
        for(int n=1;n <=a.length;n++)k+=a[n]; 
        return i-k; 
    }第2题还在想ing...
      

  3.   

    好像时间复杂度不满足,,,希望有更好的解决方法
    ---------------------------------------/**
     * project_name: Test
     * package_name: netsource
     * package_declaration: package netsource;
     * filename: FoundNumber.java
     * author: yuhaiming
     * date: 2007-11-13
     */
    package netsource;
    import java.math.*;
    /**
      * 1.   在从1到n这n个连续自然数中,任意取出n-1个数放在一个含有n-1个项的数组中(任意顺序排列),请你用java或C编写一个函数,用以找到所缺的那个数。要求该算法满足时间复杂度为o(n),空间复杂度为常数。 
            
    2.   对于上题的算法,能否扩充到支持:在从1到n这n个连续自然数中,任意取出n-2个数放在一个含有n-2个项的数组中(任意顺序排列)?如果不能够,请找出一个新算法:满足时间复杂度为o(n),空间复杂度为常数。 
              
    3.   请你用java或C编写一个函数,用以寻找一个单向链表的中间结点,要求该算法尽量少的遍历列表。 


    现有两个表: 
          1.   用户信息表(UserInfo)包括UID(用户ID,主键)、UNAME(姓名)、USALARY(工资)、UDEPTNO(所在部门编号)以及UPOS(级别) 
          2.   印章表(SealInfo)包括SEALID(印章编号,主键)、SEALNAME以及SEALDATA 
          请设计一个用户和印章关系表,做到:   
                  a.   一个用户可以拥有多个印章; 
                  b.   一个印章可以被多个用户同时拥有; 
                  c.   一个印章可以被一个或多个部门同时拥有. 
          然后完成以下操作: 
          1.   删除印章(SEALID=A)所需的SQL语句及步骤。 
          2.   请用SQL语句查询印章(SEALID=C)可以被那些用户或部门(编号)使用。 
          3.   请用SQL语句查询用户(UID=C)可以使用的所有印章。 
     * @author yuhaiming
     *
     */
    public class FoundNumber {
    /**
     * 主处理函数
     */
    public static void disposal(){
    int[] number = new int[5];
    initnumber(number);
    displayNumber(number);
    int resultNum = foundNumber(number);
    System.out.println("查找出来的数为:"+resultNum);
    }
    public static int foundNumber(int[] number){
    for(int i=1;i<(number.length+1);i++){
    if(distinguish(number,i))return i;
    }
    return 0;
    }
    /**
     * 打印数组
     * @param number
     */
    public static void displayNumber(int[] number){
    System.out.println("数组为:");
    for(int i=0;i<number.length;i++){
    System.out.print(number[i]+"  ");
    }
    System.out.println();
    }
    /**
     * 初始化数组
     * @param number
     */
    public static void initnumber(int[] number){
    int curnumber;

    //依次对数组元素进行赋值
    for(int i=0;i<number.length;i++){
    curnumber = (int)(Math.random()*(number.length+1))+1;

    while(!distinguish(number,curnumber)){
    //不能赋值,则继续生成随机数,直到生成的数能够赋值为止
    curnumber = (int)(Math.random()*(number.length+1))+1;
    }

    number[i] = curnumber;

    }
    }
    public static boolean distinguish(int[] number,int curnumber){
    for(int i=0;i<number.length;i++){
    if(curnumber==number[i])return false;
    }
    return true;
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    disposal();
    }}
      

  4.   

    又写错了...以这个为准..public int Test(int[] a){   
            int i=(1+a.length+1)*(a.length+1)/2;   
            int k=0;   
            for(int n=0;n<a.length;n++)k+=a[n];   
            return i-k;   

      

  5.   

    第二题public int[] Test(int[] a){       
        int i=(1+a.length+1)*(a.length+1)/2;       
        int k=0;       
        for(int n=0;n<a.length;n++)k+=a[n];       
        int s=i-k;
        i=(1+s/2)*(s/2)/2;
        k=0;
        for(int n=0;n<a.length;n++){
            if(a[n]<=s/2)k+=a[n];
        }
        int[] t=new int[2];
        t[0]=i-k;
        t[1]=s-t[0];
        return t;
        
    }第三题我就不管了(其实是不会..)
      

  6.   

    SealForUser(印章关系表): uuid(主键), UID(用户ID,fk),SEALID(印章编号,fk)、
    1.delete from SealForUser where SEALID=='A' ;
      delete from SealInfo where SEALID=='A' ;
    2.select u.UNAME,u.UDEPTNO from UserInfo u ,SealForUser s where s.SEALID=='C' ;
    3.select * from SealForUser s where s.UID='C';
    没测试不知道对不对!
      

  7.   

    delete * from SealInfo where SEALID=Aselect UID,UDEPTNO from UserInfo where 联接条件select SEALID from SealInfo where 联接条件关于联接条件 可以在用户信息表中设立一个 拥有印章(ALLSEALS) 字段 
    在印章表中 设立一个 所有人(OWNERS)字段 
    select UID,UDEPTNO from UserInfo where ALLSEALS like '%C%'select SEALID from SealInfo where OWNERS like '%C%'