| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 545 人关注过本帖
标题:C语言编程问题
只看楼主 加入收藏
liyanfol
Rank: 1
等 级:新手上路
帖 子:9
专家分:4
注 册:2010-5-20
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:7 
C语言编程问题
有N(N>1)个人围着在一个餐桌吃饭,从第K个人开始计数,每当到P的倍数的人被请出。如此反复,直到最后一个。问最后一个人在原来的位置。
PS:我个人的想法如下:1.利用结构体和环形链表建立模型,根据K和N来确定吃饭人的顺序和人数。
                      2.在结构体中根据K给各块分配序号。
                      3.利用指针循环,当指针到P的倍数时,清除该块。
                      4.最后留下的根据结构体中的序号确定原位置。
搜索更多相关主题的帖子: C语言 
2010-05-25 15:37
韩明海
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:253
专家分:749
注 册:2010-4-3
收藏
得分:10 
没什么问题啊,写个程序试试吧
2010-05-25 15:51
liyanfol
Rank: 1
等 级:新手上路
帖 子:9
专家分:4
注 册:2010-5-20
收藏
得分:0 
回复 2楼 韩明海
请问我理解的对么?
2010-05-25 16:08
韩明海
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:253
专家分:749
注 册:2010-4-3
收藏
得分:0 
感觉没什么问题,只要在程序能正确表达你的意思,就应该可以的
2010-05-25 16:12
simen1986
Rank: 2
等 级:论坛游民
帖 子:12
专家分:64
注 册:2010-5-25
收藏
得分:10 
  理解没有对与错,只要能得出你的结果,都可以的
  关键在于算法优化。

 
2010-05-25 16:38
liyanfol
Rank: 1
等 级:新手上路
帖 子:9
专家分:4
注 册:2010-5-20
收藏
得分:0 
回复 5楼 simen1986
谢谢!
2010-05-25 21:55
liyanfol
Rank: 1
等 级:新手上路
帖 子:9
专家分:4
注 册:2010-5-20
收藏
得分:0 
回复 4楼 韩明海
麻烦大侠帮忙看看这个程序:
#include "stdio.h"
typedef struct listnode
{
   int data;
   listnode *next;
};
listnode order(int k,int n)
{
  listnode *persion,*head,*p,*q,*h;
  p=head=(listnode)malloc(listnode);
  for(i=0;i<n-1;i++)
 {
   q=(listnode)malloc(listnode);
   p->next=q;
   q=p;
   
 }
 p=h;
 p->next=head;
 head=p;
 for(i=k;i<=n;i++)
  {
   p->data=k;
   p++
  }
 for(j=k-1;j>0;j--)
 {
   h->data=j;
   h--;
 }
  return head;
}
void delect(int k,listnode w)
{listnode *p,*q;
 int n;
 w=p;
 while(p->data!=k)
 p->next=p;
 for(n=1;p->next!=null;n++)
 {
  p=p->next;
  if(n%5==0)
  {
   q=p->next;p->next=q->next
  }
 }
 printf("%d",p->data);
}
void main()
{int a,b;
listnode *l,*w;
printf("请输入用餐人数:");
scanf("%d",&a);
printf("请输入从第几人开始计数:");
scanf("%d",&b);
l=order(b,a);
delect(b,l);


}
2010-05-25 22:48
韩明海
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:253
专家分:749
注 册:2010-4-3
收藏
得分:0 
#include "stdio.h"
typedef struct listnode
{
   int data;
   listnode *next;
};
listnode *order(int k,int n)
{
  listnode *persion,*head,*p,*q,*h;
  p=head=(listnode)malloc(listnode);
  for(i=0;i<n-1;i++)
  {
     q=(listnode)malloc(listnode);
     p->next=q;
     p = q;   //改过   让p指向尾
  }
  //p=h;     去掉  h现在什么都不是,你让p指向它干什么
   p->next=head;   //一个环就连好了
//head=p;  想干什么
    p = head;
    for(i=0;i<n;i++)给链表标号
   {
     p->data=i;
   //  p++     链表不是数组
    p = p->next;
   }
    for(j=0;j<k-1;j++)使指针指向第k个
    {
       head = head->next;
    }
      return head;
}
void delect(int n,int p,listnode *w)
{listnode *p,*q,*head;
int i = 0 ;
//w=p;  和上面一样,p是空的
 q = p = head = w;
for(i=0;i<n-2;i++)
{
    q = q->next; 让q指向尾
}
for(i=n;i>1;i--)
{
    while(p->data!=p%n)
    {
        p = p->next;
        q = q->next;
    }
    q->next = p->next;  把p前后两个节点连接
    free(p); 释放空间,每个malloc对应一个free
}
printf("%d",p->data);//删除了n-1个,最后剩下一个
}
void main()
{int a,b,p;
listnode *l,*w;
printf("请输入用餐人数:");
scanf("%d",&a);
printf("请输入从第几人开始计数:");
scanf("%d",&b);
printf("请输入p = :");
scanf("%d",&p);

l=order(b,a);
delect(a,p,l);


}
这是我的思路,哪里不对,你自己改改吧,指针的使用要多看啊
2010-05-28 13:22
快速回复:C语言编程问题
数据加载中...
 
   



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

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