| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 843 人关注过本帖
标题:求助 帮看看程序 那错了
只看楼主 加入收藏
babysky_h
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-5-9
收藏
 问题点数:0 回复次数:3 
求助 帮看看程序 那错了
N个人组成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位?
那位打个看看我的程序那错了! 谢谢了
#include<stdio.h>
f(int *pt,int n)
{int m,i,t;
m=n%3;
while(n>=3)
{n=(n-n/3);
for(i=1;i<=n;i++)
   {if(i=3) continue;
    t=i/3;
   *(pt+i-t-1)=*(pt+t);
   }
   for(i=n;i>=1;i++)
   *(pt+i-1+m)=*(pt+i-1);
   for(i=1;i<=m;i++)
   *(pt+i-1)=*(pt+n-m+1);

 }
 for(i=0;i<n;i++)
  printf("%d",*(pt+i));
  }
  #define N 5
  void main()
  {int a[N],*p,i;
   p=a;
  for(i=0;i<N;i++)
    a[i]=i+1;
 f(p,N);
}
搜索更多相关主题的帖子: int void continue 
2008-02-03 16:22
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
偶写的:
#include<stdio.h>
#include<stdlib.h>
int judge_(int* array,int n)  //判断是否只剩一人
{
    int count=0,flag=-1;
    for(int i=0;i<n;i++)
        if(array[i]==0) { flag=i+1; count++;}
    if(count==1) return flag;
    else return 0;
}
int reslut(int n)
{
    int * people=(int*)malloc(sizeof(int)*n);  
    int i=0,rlst=-1,m=0;
    for(;i<n;i++) people[i]=0;
    for(i=1;;)
    {
        if(rlst=judge_(people,n)) { free(people); return rlst; }
        //第m+1个人没出去
        if(!people[m])
        {
            if(i==3) //数到三
            {
                 people[m%n]=1; i=1;
            }
            else i++;
            m=(m+1)%n;
        }
        else  //第m+1个人出去
        {
                    while(people[(++m)%n]);
           if(i==3)  
           {
            people[m%n]=1; i=1;
           }
           else  //否则
           {
               i++;
           }
                      m=(m+1)%n;
        }
    }
}
int main(void)
{
   int n;
    while(scanf("%d",&n)!=EOF) printf("%d\n",reslut(n));
  return 0;
}

[[it] 本帖最后由 中学者 于 2008-2-3 18:12 编辑 [/it]]

樱花大战,  有爱.
2008-02-03 18:09
jijiwawa
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-2-3
收藏
得分:0 
楼主的意思是循环报数吗?最后剩下两个的那种?

我是菜宝宝,大家帮忙啊,谢谢!!
2008-02-04 13:31
babysky_h
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-5-9
收藏
得分:0 
我知道那错了!!谢谢支持 重新发一遍!
#include<stdio.h>
void f(int *pt,int n)
{int m,i,t;
while(n>=3)
{m=n%3;
for(i=0;i<n;i++)
   {if((i+1)%3==0) continue;
    t=(i+1)/3;
   *(pt+i-t)=*(pt+i);
   }
   for(i=n-1;i>=0;i--)
   *(pt+i+m)=*(pt+i);
   for(i=0;i<m;i++)
   *(pt+i)=*(pt+n-1);
n=(n-n/3);

}
for(i=0;i<n;i++)
  printf("%5d",*(pt+i));
  }
  #define N 5
  void main()
  {int a[N],*p,i;
   p=a;
  for(i=0;i<N;i++)
    {a[i]=i+1;
    printf("%2d",a[i]);
    }
    printf("\n");
    f(p,N);
getch();
}
2008-02-07 15:38
快速回复:求助 帮看看程序 那错了
数据加载中...
 
   



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

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