免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: jronald
打印 上一主题 下一主题

据说是微软面试题 [复制链接]

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-03-12 06:20:00
31 [报告]
发表于 2006-12-06 17:48 |只看该作者
原帖由 xxandxx 于 2006-12-5 20:31 发表
1952

int fun(int n)
{
    int first=1, last=n, i;
    int *b = (int *)malloc(2*n*sizeof(int));

    for (i = 1; i <= n; ++i)
        b = i;
   
    while(last-first != 1) {
     ...


如果fun(5)
为什么得到的是2?
不是第二次应该是4?

论坛徽章:
0
32 [报告]
发表于 2006-12-06 17:56 |只看该作者
原帖由 qlks 于 2006-12-6 17:48 发表


如果fun(5)
为什么得到的是2?
不是第二次应该是4?


你算错了

论坛徽章:
0
33 [报告]
发表于 2006-12-06 19:23 |只看该作者
public class FindLeaveNum {



        /**

         * @param args

         */

        public static void main(String[] args) {

                // TODO Auto-generated method stub



                final int CAPABILITY = 2000;
                Vector v = new Vector(CAPABILITY );



                for (int i = 0; i < v.capacity(); i++) {

                        v.add(i, new Integer(i+1));

                }

                int i = 0;

                int beforeLast = Integer.parseInt(v.lastElement().toString());

                while (v.size()!= 1) {



                        for (int c = i; c < v.size(); c++) {

                                v.remove(c);

                        }

                       

                        System.out.print("剩下"+v.size()+"个: ");

                        for(int j=0;j<v.size();j++)

                        {

                                System.out.print(v.get(j)+" ");

                        }

                        System.out.println();

                       

                        int nowLast=Integer.parseInt(v.lastElement().toString());

                       

                        if(nowLast==beforeLast)

                        {

                                i=0;

                        }

                        else i=1;

                        beforeLast =nowLast;

                }



        }



}


结果是 1952

论坛徽章:
0
34 [报告]
发表于 2006-12-06 21:35 |只看该作者

我写的,不如楼上的那位简洁。

typedef struct tagRingElement {
        tagRingElement * prev;
        tagRingElement * next;
        int data;
} RingElement_t;

const  int COUNT = 2000;

void main()
{
        RingElement_t * num = new RingElement_t[COUNT];

        RingElement_t * curdel, * nextdel, * prev, * next, * last;
       
        // num[0]
        num[0].data = 1;
        num[0].prev = num + COUNT - 1;
        num[0].next = num + 1;

        // num[1999]
        num[COUNT - 1].data = COUNT;
        num[COUNT - 1].prev = num + COUNT - 2;
        num[COUNT -1].next = num;

        for (int i = 1; i < COUNT - 1; i++)
        {
                num.prev = num + i - 1;
                num.next = num + i + 1;
                num.data = i + 1;
        }

        curdel = num;
        while (curdel->next != curdel->prev)
        {
                // store curdel->next->next;
                next = curdel->next;
                prev = curdel->prev;
                nextdel = next->next;

                // delete curdel
                next->prev = curdel->prev;
                prev->next = curdel->next;

                curdel = nextdel;
        }

        last = curdel->next;

        cout << last->data << endl;

        delete [] num;
}

忘了释放内存了,重贴一遍。

[ 本帖最后由 diabolo 于 2006-12-6 21:39 编辑 ]

论坛徽章:
0
35 [报告]
发表于 2006-12-07 09:40 |只看该作者
1952

  1. import java.util.ArrayList;
  2. import java.util.List;

  3. /**
  4. *
  5. * @author Zhao
  6. */
  7. public class count {
  8.    
  9.     /** Creates a new instance of count */
  10.     private static List<Integer> data = new ArrayList<Integer>();
  11.     public static void main(String args[]) {
  12.         for(int i=1;i<=2000;i++){
  13.             data.add(i);
  14.         }
  15.         
  16.         boolean FlagSize = false;
  17.         
  18.         while(data.size() > 1){
  19.             int intSize = data.size();
  20.             for(int i=0;i<intSize;i++){
  21.                 if(i>=data.size()){
  22.                     break;
  23.                 }
  24.                 if(FlagSize){
  25.                     FlagSize = false ;
  26.                     i++;
  27.                 }
  28.                 if(i==(data.size()-1)){
  29.                     FlagSize =true;
  30.                 }
  31.                 data.remove(i);
  32.             }
  33.         }
  34.         System.out.println(data.get(0));
  35.         
  36.     }
  37.    
  38. }
复制代码

[ 本帖最后由 zjbluefox 于 2006-12-7 10:50 编辑 ]

论坛徽章:
0
36 [报告]
发表于 2006-12-07 12:02 |只看该作者
(2000循环左移1)-1=1952

2000: 11111010000
2000循环左移1:11110100001
2000循环左移1-1:11110100000=1952

论坛徽章:
0
37 [报告]
发表于 2006-12-07 12:19 |只看该作者
原帖由 crspo 于 2006-12-7 12:02 发表
(2000循环左移1)-1=1952

2000: 11111010000
2000循环左移1:11110100001
2000循环左移1-1:11110100000=1952


赞一个先!能说下为啥吗?

论坛徽章:
0
38 [报告]
发表于 2006-12-07 14:26 |只看该作者
1953 用程序算出来的,为啥和上面不一样呢?

[ 本帖最后由 decwang 于 2006-12-7 14:31 编辑 ]

论坛徽章:
0
39 [报告]
发表于 2006-12-07 14:58 |只看该作者
看错题了,呵呵

[ 本帖最后由 decwang 于 2006-12-7 14:59 编辑 ]

论坛徽章:
0
40 [报告]
发表于 2006-12-07 17:06 |只看该作者
原帖由 tyc611 于 2006-12-7 12:19 发表


赞一个先!能说下为啥吗?

约瑟夫问题的小变体,可以参考concrete mathematics第一章
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP