| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1989 人关注过本帖
标题:急!问题求解,算法思想?
只看楼主 加入收藏
NoSoul
Rank: 9Rank: 9Rank: 9
来 自:沈阳化工大学
等 级:蜘蛛侠
帖 子:283
专家分:1010
注 册:2009-6-6
收藏
得分:0 
回复 20楼 UserYuH
有那么复杂吗?你看我那程序  那么短就能搞定啊

我想伸手拉近點,竟觸不到那邊,就欠一點點,但這一點點...卻好遠
2009-09-14 18:25
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:0 
你的真的很短!

努力—前进—变老—退休—入土
2009-09-14 18:37
rofor
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:68
专家分:165
注 册:2009-6-12
收藏
得分:0 
水题。

第一题是第二类斯特林数
第二题直接找规律即可。

I'm rofor.
for(;;;);  :-)
RoFoR [AT] YaHoO [DoT] CN
2009-09-14 21:44
youyuanjia
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-9-19
收藏
得分:0 
回复 20楼 UserYuH
帮忙解释下下,谢谢!
2009-09-14 23:00
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:16 
解释杀猴的吗?链表可能复杂了一点,就用数组的吧,这比较容易看得懂。
main()
{
  int i,k,m,n,num[500],*p=num;
  printf("\nInput the number of person n=");
  scanf("%d",&n);
  for(i=0;i<n;i++) /* 如输入400,则对400猴进行编号 */
    *(p+i)=i+1;
  i=0;k=0;m=0;
  while(m<n-1)
   {
    if(*(p+i)!=0) k++;
    if(k==2)
     {
      *(p+i)=0;   /* 每数到第二下把猴杀掉,用0表示 */
      k=0;
      m++;
     }
    i++;
    if(i==n) i=0;    /* 数到最尾一只猴就转到开头继续数 */
   }
   while(*p==0)p++;
   printf("the last one is No.%d\n",*p);
}

[ 本帖最后由 UserYuH 于 2009-9-14 23:24 编辑 ]

努力—前进—变老—退休—入土
2009-09-14 23:15
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 25楼 UserYuH
//链表可能复杂了一点,就用数组的吧,这比较容易看得懂

这句话对大多数人来说是个伪命题

[ 本帖最后由 BlueGuy 于 2009-9-15 18:08 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2009-09-15 17:52
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:2 
程序代码:
#include <stdio.h> 
#define N 400 
#define M 2 
int main(void) 
{ 
    int a[410]; 
    int i, j; 
 
    for (i = 1; i <= N; i++) 
        a[i] = i + 1;   
      
    a[N] = 1; 
    j = a[N-1]; 
 
    while (j != a[j]) 
    { 
        for (i = 1; i < M; i++) 
            j = a[j]; 
        printf("%d ", a[j]); 
        a[j] = a[a[j]]; 
    } 
    printf("%d\n", a[j]); 
    return 0; 
}

我就是真命天子,顺我者生,逆我者死!
2009-09-15 18:00
qq8080
Rank: 1
来 自:成都
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-9-15
收藏
得分:0 
学习了!

www.成都网站建设、网页设计、网站推广
2009-09-15 19:09
已屏蔽
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:89
专家分:124
注 册:2009-9-5
收藏
得分:2 
搜了下,学习了

S(n,4)表示把n个有区别的元素分到4个无区别的非空集合里面的方法数
可以用斯递推式解决:
S(n,k) = k*S(n-1,k) + S(n-1,k-1);S(n,1)=1(n≥1),S(n,n)=1。
 
上面的递推式可以用组合证明:一方面,如果将元素1单独拿出来划分成1个集合,那么方法数是S(n-1,k-1);另一方面,如果元素1所在的集合不止一个元素,那么可以先将剩下的n-1个元素划分好了以后再选一个集合把1放进去,方法数是k*S(n-1,k);有加法原理得证。
 
当然,第二类斯特林数还有一个通式:
S(n,k)= \Sigma(j=1 to k) [(-1)^{k-j}*j^{n-1}]/[(j-1)!*(k-j)!]
      = 1/k! * \Sigma(j=0 to k) (-1)^{k-j}j^n*C(k,j)
展开就是
S(n,4)=[(4^{n-1}-3^{n-1})-(4^{n-1}-2^{n-1})+(4^{n-1}-1^{n-1})/3]/2



第二个是每次循环+2,如果超过了循环计数就减去它
2009-09-15 22:59
快速回复:急!问题求解,算法思想?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017160 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved