| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 566 人关注过本帖
标题:这个问题怎么个思路???
只看楼主 加入收藏
jin11061201
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-12-9
结帖率:0
收藏
已结贴  问题点数:20 回复次数:7 
这个问题怎么个思路???
有n个小朋友围成一圈(n<50),顺序编号(编号从1~n)。
从第1号小朋友开始1、2、3报数,凡报到3的小朋友退出圈子,圈中剩下最后的这个小朋友将分得巧克力糖。
输出最后圈内剩下的这个小朋友的编号。



搜索更多相关主题的帖子: 小朋友 
2011-12-09 10:33
xdh0817
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:193
专家分:195
注 册:2011-10-20
收藏
得分:5 
#include<stdio.h>
#define num 16
void process(int *p,int *p2)
{  
   int i,m,k;
   m=3;k=3;
   while(m>2)
   {
      m=0;
         for(i=0;i<=num-1;i++)
        if(*(p+i)!=0)
         {   k++;
           if(k%3==0)  *(p+i)=0;
         }
    for(i=0;i<=num-1;i++)
        if(*(p+i)!=0) m++;
     }
      for(i=0;i<=num-1;i++)
     if(*(p+i)!=0) { *p2=i;p2++;}
}
void main()
{
 int a[num],i,*p1,*p2,b[2];
 for(i=0;i<=num-1;i++)
  a[i]=1;
  p1=a;p2=b;   
    process(p1,p2);
    printf("the result is :  ");
    for(i=0;i<=num-1;i++)
    printf("%2d",a[i]);
    printf("\n theremained num is : num.%d and num.%3d",b[0],b[1]);
}
2011-12-09 13:55
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:5 
百度一下约瑟夫环,有大量算法及实现

总有那身价贱的人给作业贴回复完整的代码
2011-12-09 14:18
hnuhsg1226
Rank: 9Rank: 9Rank: 9
来 自:中国
等 级:蜘蛛侠
威 望:2
帖 子:314
专家分:1314
注 册:2011-3-27
收藏
得分:5 
建一个循环链表,再结构体中加一个标志,凡是报过3的就标记下,以后不再加入报数循环,最后留一个人就行了

我的地盘
2011-12-09 16:43
于祥
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:5
帖 子:1047
专家分:4132
注 册:2011-4-24
收藏
得分:5 
#include "stdio.h"
void main()
{
    #define N 10000
    int integer[N];
    int i,n,flag=0,k,j,d=1;
    int *p=integer;
    printf("请输入要围成一圈的人数(1<n<50):");
    scanf("%d",&n);
    for(i=0;i<n;i++)
       *(p+i)=i+1;
    i=0;
    while(99)
    {   
      for(k=1;k<=3;k++)
      {
        if(i<=n-1)
        {
          if(k==3)
            if(*(p+i))
             *(p+i)=0;
             else
             {   
                while(d)
                {
                    i++;
                    if(i>n-1)
                    {
                      for(j=0;j<n;j++)
                      if(*(p+j))
                      {
                          i=j;
                          *(p+i)=0;
                          d=0;
                          break;
                      }
                    }
                    else
                    {
                      if(*(p+i))
                       {*(p+i)=0;break;}
                    }
                }
                d=1;
             }
        }
        else
        for(j=0;j<n;j++)
        {   
            if(*(p+j))
            {
                i=j;
                if(k==3)
                    {*(p+i)=0;break;}
                else break;
            }
        }
        while(99)
        if(k!=3)
          {
              if(*(p+i))
            {i++;break;}
            else
            {
                if(i<n-1)
                    i++;
                else
                for(j=0;j<n;j++)
                {if(*(p+j)) i=j; break;}
            }
          } else {i++;break;}
      }
      flag++;
      if(flag==n-1) break;
    }
    for(i=0;i<n;i++)
        if(*(p+i))
           printf("\n剩下的是原来的第%d位!\n",i+1);
}
我写的有点儿复杂!

最基础的往往是你最容易忽略的!
2011-12-09 22:45
于祥
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:5
帖 子:1047
专家分:4132
注 册:2011-4-24
收藏
得分:0 
每次数三个不为0的数,把第三个设为0!

最基础的往往是你最容易忽略的!
2011-12-09 22:46
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 楼主 jin11061201
#include <stdio.h>
int main(void)
{
    int n, m, i, s=0;
    printf ("N M = ");
    scanf("%d%d", &n, &m);
    for (i=2; i<=n; i++)
        s=(s+m)%i;
    printf ("The winner is %d\n",s);
    return 0 ;
}

[ 本帖最后由 embed_xuel 于 2011-12-9 22:54 编辑 ]

总有那身价贱的人给作业贴回复完整的代码
2011-12-09 22:53
于祥
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:5
帖 子:1047
专家分:4132
注 册:2011-4-24
收藏
得分:0 
#include <stdio.h>
void main()
{int i,k,m,n,num[50],*p=num;
 printf("\nInput number of person:n=");
 scanf("%d",&n);
 for(i=0;i<n;i++)
    *(p+i)=i+1;i=0;k=0;m=0;
 while(m<n-1)
    {if(*(p+i)!=0) k++;
     if(k==3)
    {*(p+i)=0;k=0;m++;}
     i++;if(i==n) i=0;}
 while(*p==0) p++;
   printf("The last one is NO.%d\n",*p);
}
简单的

最基础的往往是你最容易忽略的!
2011-12-10 10:22
快速回复:这个问题怎么个思路???
数据加载中...
 
   



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

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