| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 468 人关注过本帖, 3 人收藏
标题:这个题目谁会做?
只看楼主 加入收藏
cailifeng
Rank: 1
来 自:福建
等 级:新手上路
帖 子:7
专家分:0
注 册:2009-9-25
结帖率:100%
收藏(3)
已结贴  问题点数:20 回复次数:5 
这个题目谁会做?
25个人围成一圈,从1开始报数,从第一个开始,数到3或3的倍数者退出圈子,问最后剩下者开始的序号,用链表或用数组编程.
2009-10-22 18:40
sen_lin
Rank: 6Rank: 6
等 级:侠之大者
威 望:3
帖 子:114
专家分:436
注 册:2009-3-24
收藏
得分:0 
约瑟夫问题,书上有这个例子啊;
#include<stdio.h>
#define M  25
#define N  3
 
void main()
{
     int a[M+1],i,j=0,l;
      
     for(i=1;i<=M;i++)
         a[i]=1;
     do {
         for(i=1;i<=M;i++) {
             j+=a[i];
             if(j==N) {
                 a[i]=0;
                 j=0;
                 printf("%4d",i);
             }
         }
         l=0;
         for(i=1;i<=M;i++)
             l+=a[i];
     }while(l);
}
   
2009-10-22 21:36
cailifeng
Rank: 1
来 自:福建
等 级:新手上路
帖 子:7
专家分:0
注 册:2009-9-25
收藏
得分:0 
用链表呢???
2009-10-23 11:28
cailifeng
Rank: 1
来 自:福建
等 级:新手上路
帖 子:7
专家分:0
注 册:2009-9-25
收藏
得分:0 
回复 2楼 sen_lin
看不太懂,能解释下不
2009-10-23 11:30
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:20 
给你三种不同方式的:
一:
程序代码:
#include <stdio.h> 
int main (void) 
{ 
 int i,k,m,n; 
 scanf("%d%d",&m,&n); 
 for(i=2,k=1;i<=m;i++) 
    k=k+n>i?k+n-i:k+n; 
 printf("%d\n\n",k); 
 return 0; 
}
输入:25 3
显示:14
·
二:
程序代码:
#include <stdio.h> 
int main(void) 
{ 
  int i,j,k,m,n,num[500],*p=num; 
  scanf("%d%d",&n,&m); 
  for(i=1;i<=n;i++) 
    p[i-1]=i; 
  i=0;k=0;j=0; 
  while(j<n-1) 
   { 
    if(p[i]!=0) k++; 
    if(k==m) 
     { 
      p[i]=0;   
      k=0; 
      j++; 
     } 
    i++; 
    if(i==n) i=0;   
   } 
   while(*p==0)p++; 
   printf("the last one is No.%d\n",*p); 
   return 0; 
} 

输入:25 3
显示:the last one is No.14
·
·
三:
程序代码:
#include<stdio.h>  
#include<malloc.h>  
#include<stdlib.h>  
struct M  
{  
    int num;  
    struct M *next;  
};  
int main(void)  
{  
    int i, j, n, t;  
    struct M *p, *q, *head,*w;  
    p = (struct M*)malloc(sizeof(struct M)); 
    scanf("%d%d", &n,&t);  
    for(i = 1;i <= n;i++)  
    {  
        q = (struct M*)malloc(sizeof(struct M));  
        q->num = i;  
        if(i == 1) head = q;  
        p->next = q;  
        p = q;  
    }  
    p->next = head;  
    p = head;  
    w=head;  
    for(i = 0;i <= n-2;i++)  
    {  
        for(j = 0;j <= t-1;j++)  
        {  
            q = p;  
        p = p->next;  
        if(w->next!=q&&w!=q)w=w->next;  
        }  
    w->next = p;  
    }  
    printf("The king: %d\n", p->num);  
    getch();  
    return 0;  
 
} 
输入:25 3
显示:14

努力—前进—变老—退休—入土
2009-10-23 11:37
lb278792804
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2009-10-23
收藏
得分:0 
用数组做的比较 用的是指针的方法做的 看看是不是这样
#include<stdio.h>
main()
{
    int a[25],i,*p=a;
    for(i=0;i<25;i++)
    scanf("%d",p++);
    p=a;
    for(i=0;i<25;i++)
    {
        if(*p%3!=0)
            printf("%d",*p);
        p++;
    }
}
2009-10-23 14:12
快速回复:这个题目谁会做?
数据加载中...
 
   



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

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