| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1027 人关注过本帖
标题:一道面试题,请教答案
只看楼主 加入收藏
flydream0
Rank: 1
等 级:新手上路
帖 子:20
专家分:7
注 册:2008-10-10
收藏
 问题点数:0 回复次数:9 
一道面试题,请教答案
用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程序。

提示:循环链表,用取余操作做.
具体怎么操作?
搜索更多相关主题的帖子: 面试 
2010-12-06 21:07
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
用队列  不是循环链表  是链队列

                                         
===========深入<----------------->浅出============
2010-12-06 21:16
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
循环链表可以的,单链表也行,不过我们用取余方法做过,只要能达到要求就行了啊
2010-12-06 22:02
五当家
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:2
帖 子:1112
专家分:3674
注 册:2010-10-20
收藏
得分:0 
#include<stdio.h>
void main()
{
    int i,m,n;
    printf("请输入m,n的值:\n");
    scanf("%d%d",&m,&n);
    for(i=1;i<=m;i++)
    {
        if(i%n==0)
        {
            printf("%d\n",i);
        }
    }
}
这个行不行呀?

经验积累中............
2010-12-06 22:33
flydream0
Rank: 1
等 级:新手上路
帖 子:20
专家分:7
注 册:2008-10-10
收藏
得分:0 
以下是引用五当家在2010-12-6 22:33:09的发言:

#include
void main()
{
    int i,m,n;
    printf("请输入m,n的值:\n");
    scanf("%d%d",&m,&n);
    for(i=1;i<=m;i++)
    {
        if(i%n==0)
        {
            printf("%d\n",i);
        }
    }
}
这个行不行呀?
你这个是不行的,你看题目,你把题目的意思理解错了.
有哪位大侠能把源码贴上来看看哦?
2010-12-07 21:41
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<malloc.h>
typedef struct linklist
{
    int data;
    struct linklist *next;
}nodetype;
nodetype *cyccreate(int n)//创建链表
{ 
    nodetype *head,*r,*p;
    int i;
    head=(nodetype *)malloc(sizeof(nodetype));
    head->data=1;
    r=head;
    
    printf("创建一个循环链表:\n");
    for(i=2;i<=n;i++)
    {
        p=(nodetype *)malloc(sizeof(nodetype));
        p->data=i;
        r->next=p;
        r=p;
    }
    r->next=head;
    return head;
}
void cycdisp(nodetype *h)//输出由h指向的单循环的所有data阈的值
{
    nodetype *p=h;
    printf("输出一个单循环链表\n");
    if(p==NULL)
    {
        printf("链表为空\n");
        return ;
    }
    while(p->next!=h)
    {
        printf("%4d",p->data);
        p=p->next;
    }
    printf("%4d\n",p->data);

}
void B_shu(nodetype *head,int n,int k)
{
    nodetype *q,*p=head;
    int pcount=0,t=k;;//删除结点计数器
    while(pcount!=(n-1))
    {
        k=t;
        while(k!=1)
        {
            q=p;
            p=p->next;
            k--;
        }
        if(k==1)
        {
            q->next=p->next;
             printf("%4d",p->data);
             free(p);
            pcount++;
            p=q->next;
        }
    }
    printf("%4d\n",p->data);//输出最后一个元素
        free(p);//释放最后一个结点
}
        

        
        
void main()
{
    nodetype *head;
    int n,k;
    printf("please input a value n:\n");
    scanf("%d",&n);
    head=cyccreate(n);//创建循环链表
    cycdisp(head);//输出循环链表
    printf("please input a  value k:\n");
    scanf("%d",&k);
    B_shu(head,n,k);
}

    
这是我用循环链表做的,单链表的即不发上来了,楼主参考下哈
2010-12-07 21:58
落拓
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:58
专家分:173
注 册:2010-9-29
收藏
得分:0 
#include<stdio.h>
#include<malloc.h>

void main()
{
    int i,n,j,*p,m,s,t;

    scanf("%d%d%d",&n,&s,&m);//输入总人数,开始的号数,出位数  楼主题目中的开始号数为 1
     t=n;
    p=(int *) malloc(n*sizeof(int));//动态构建数组

    for(i=0;i<n;i++)//初始化数组
        p[i]=i+1;

    for(i=s-1,j=0; t ;)
    {
        if(p[i]!=0) j++;
        if(j==m)
        {
            printf("%d ",p[i]);
            p[i]=0;
            j=0;
            t--;//人数减一

        }
        i=(i+1)%n;
    }

}

这个问题就是Josephus问题
2010-12-08 00:34
mengcong3959
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:41
专家分:113
注 册:2010-12-6
收藏
得分:0 
自己用指针写了个,,看下吧
#include <stdio.h>
#include<malloc.h>

int main ()
{
    int *a;
    int i,j,t;
    j=1;
    int m,n;
    scanf("%d%d",&m,&n);
    a=(int *) malloc(n*sizeof(int));//动态构建数组
    t=n;
    for (i=0;i<n;i++)
        a[i]=i+1;
    while (t>0)
    {
        for (i=0;i<n;i++)
        {
            if (a[i]!=0)
            {
                if (j%m==0)
            {        printf ("%d\n",a[i]);
                printf("\n");
                    a[i]=0;
                 --t;
            }
            j++;
            }

        }

    }

}
2010-12-08 19:54
flydream0
Rank: 1
等 级:新手上路
帖 子:20
专家分:7
注 册:2008-10-10
收藏
得分:0 
6楼的不错,是常规思想,但我更喜欢第7楼的方法, 8楼的和7楼的是同一种方法了.非常感谢!
不过,如果下次大侠们命名变量名们用尽量接近变量含义的命名方法来命名就更好了,提高可读性,省时间.
2010-12-13 22:11
墨香555
Rank: 2
等 级:论坛游民
帖 子:115
专家分:31
注 册:2010-10-21
收藏
得分:0 
我是新手 没理解楼主的题意
2010-12-14 22:56
快速回复:一道面试题,请教答案
数据加载中...
 
   



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

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