| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1228 人关注过本帖
标题:N个人报数,遇3则退。最后剩下的人为原第几个(找错误)
只看楼主 加入收藏
xuanzilie
Rank: 1
等 级:新手上路
帖 子:133
专家分:0
注 册:2007-7-12
收藏
 问题点数:0 回复次数:6 
N个人报数,遇3则退。最后剩下的人为原第几个(找错误)
#include<stdio.h>
 int main()
 {
        int *p;
        int n,k,i,j;
        int a[100];
        
        printf("输入班级总人数:");
        scanf("%d",&n);
        
        for(i=0;i<n;i++)
        {
            a[i]=i+1;
        }
        
        k=1;    i=0;     p=a;    j=1;
        for(;;i++,k++,p++)
        {
            if(k==3)
            {
                *p=0;
                k=1;
                j++;
                continue;
            }
            if(*p==0)
            {
                k=k-1;
                continue;
            }
            if(i==n)
            {
                i=-1;
                p=a;
                p--;
                continue;
            }
            if(j==n-1)  break;
        }
        
        p=a;
        while(*p==0)
        {
            p++;
        }
        printf("这个同学的编号是:%d",*p);
        scanf("\n");
    }
我看了N多遍了,实在找不出来,望各位帮帮忙
搜索更多相关主题的帖子: continue include 
2008-01-02 16:06
万兽无缰
Rank: 1
等 级:新手上路
威 望:1
帖 子:296
专家分:0
注 册:2007-8-27
收藏
得分:0 
猴子选大王
请加个注释~~~

女朋友问我想怎么死~~~
             我说我想"爽死"
2008-01-02 17:09
qiang5219
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2007-9-10
收藏
得分:0 
没有看懂什么意思!
2008-01-02 17:25
llp108
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2007-11-15
收藏
得分:0 
没看懂你写的,不过我曾经做过这到题,我的程序如下:
#include "stdio.h"
#define N 50
main()
{int a[N],*pointer,i,n=N,flage=0;
 pointer=a;
 for(i=0;i<N;i++,pointer++)
     *pointer=i+1;//为数组附直从一开始//
 for(i=0;i<N;i++)
    printf("%d ",a[i]);   
 do {for(pointer=a;pointer<a+N;pointer++)
          {if(pointer==a+N)
             pointer=a;         //指针超出数组范围后继续回到a//
           if(*pointer!=0)
            {flage++;
            if(flage==3)
              {*pointer=0;     
               flage=0;
               n--;}}}     //数到三将该数附值为零,并且将flage重新变为零,数组总数少一//
     }while(n!=1);
 for(pointer=a;pointer<a+N;pointer++)
     if(*pointer!=0)
       printf("该数是%d",*pointer);
}
2008-01-02 20:14
ggggiaqgyd
Rank: 1
等 级:新手上路
帖 子:49
专家分:0
注 册:2007-10-13
收藏
得分:0 
我们老师是这么教的!!
main()
{
int m,n,d,i,count,a[50];
scanf("%d,%d",&n,&m); /*这个m就是逢m就退,跟你的有点不同*/
for(i=0;i<n;i++)
a[i]=i+1; /*把所有数都赋上非0的值*/
count=0;d=0; /*把这两个变量,变成0,大概的意思是,如果遇到那个数的话
whlie(d<n)  就给他个0的标记,以后碰到他就跳过去*/
for(i=0;i<n;i++)
if(a[i]!=0)
{
count+=1;
if(count==m)
{printf("%d",a[i]);
a[i]=0;
count=0;
d=d+1;}}
2008-01-02 20:39
argc
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-1-6
收藏
得分:0 
偶写的:
#include<stdio.h>
#define SIZE 10     /*定义猴子的数量*/
main()
{
int last=SIZE-1, count=0, i=0, m;
int array[SIZE];

for(i=0;i<=SIZE-1;i++) /*初始化*/
array[i]=1;
i=1;
printf("enter m\n");
scanf("%d",&m);   
while(last!=0){     
while(array[i]==0){
i+=1;
   if(i==SIZE)
    i=0;     /*i数到一圈后重新指向第一个猴子*/
              }
count+=1;
if(count==m) /*查到m时的猴子离开*/
{
   array[i]=0;
    last-=1;
     count=0;
}
i+=1;
if(i==SIZE)
   i=0;             }

for(i=0;i<=SIZE;i++)
{
if(array[i]==1)
   printf("%d",i);
}
return 0;
}
2008-01-06 13:17
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
template <class T>
struct node{
    T data;
    node<T> *next;
};
//猴子选大王.cpp
#include<iostream.h>
//#include"link.h"//引入头文件
void init_list(node<int> *first,int m)
{
    //生成m个节点的循环链表
    node<int> *p,*q;
    p=first;
    p->data=1;
    for(int i=2;i<=m;i++){
        q=new node<int>;
        p->next=q;
        p=q;
        p->data=i;
        p->next=first;
    }
}
void main()
    {
    int m,n,l,j=1;
    cout<<"请输入猴子的个数:";
    cin>>m;
    cout<<"请输入N:";
    cin>>n;
    node<int> *first;
    first=new node<int>;
    first->next=first;
    init_list(first,m);
    node<int> *p,*q,*r;
    p=first;
    q=first;
    r=first;
    do
    {
        r=r->next;
    }while(r->next!=first);
    while(p->next!=p)
    {
    //循环的终止条件为链表只剩一个节点
   
    q=p->next;
   
    if(j++%n==0)
    {
        r->next=q;
    }
    r=p;
    p=p->next;
    }
    cout<<"成为大王的猴子为第"<<p->data<<"个"<<endl;
}我在c++里面帮人家改得,你看看,用摸板写的,把摸板去掉就是纯粹的c代码了
2008-01-07 14:14
快速回复:N个人报数,遇3则退。最后剩下的人为原第几个(找错误)
数据加载中...
 
   



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

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