A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

#include <stdio.h>
#include <stdlib.h>
int main () {
    int m = 3;    //定义循环T出得数字
    int num = 15;
    int a[num], b[num];     //b数组用来标记
    int i, del = -1, sum;      //del为后面要备用的下标,因为下表从0开始后面牵扯从1开始计算所以定义为-1
    for (i = 0; i < num ; i++) {
        a = i + 1;                 //数组a记录编号
        b = 1;               //数组b标记是否出局,B组最后生下最后一个为1那么对应i坐标的a组最后一个就是了
    }
    printf("Pass:");
    for (sum = num; sum > 1; sum--) {      //总人数递减,直到只剩一人
        for (i = 1; i <= m;) {        //在未出局的人中以7为轮次循环
            del = (del + 1) % num; //后移下标,并控制在0~17之间
            if (b[del] == 1)
                i++;
        }
        printf(" %d", a[del]);
        b[del] = 0;
    }
    for (i = 0; b == 0; i++);          //找出未出局的编号
    printf("\nThe winner is: %d\n\n", a);
    return 0;
}
这个比较精简,,你们怎么看


11 个回复

倒序浏览
你运行过?
回复 使用道具 举报
    int num = 15;

    int a[num], b[num];

这样能通吗?
回复 使用道具 举报

#include <stdio.h>
#define N 15
int main ()
{
int a[15];

for (int i=0;i<15;i++)             //给门徒进行编号

{
    a[i]=i+1;

}


int number = 15;                   //记录当前人数
int count = 0;                     //记录报数
i = 0;
while (number > 1)                 //直到一人时退出循环
{
if (a[i] != 0)                     //没有人被剔除掉,报数有效
{
   count++;
  }
if (count == 3)                   //当有人报数为3时,退出的人计为0,报数清零,存活人数减1
{
   a[i] = 0;
   count = 0;
   number--;
  }
   i++;                             //记录报数的下一个人
if (i == 15)                     //当15人报数完毕,立即将报数人数置为第一人
{
   
    i = 0;
  
  }

}
for ( i = 0; i< 15; i++)

{
  if (a[i] > 0)                    //最后剩下的报数不能置0的人即为叛徒
  
  printf("出卖耶稣的人是第%d个门徒", a[i]);
        
               
}
  
return 0;       

}
看看我的这个,一起学习下
回复 使用道具 举报
tr2e 发表于 2015-8-25 14:44
int num = 15;

    int a[num], b[num];

可以的    因为如果不是15的话   可以方便改数字,提取代码而已
回复 使用道具 举报
tangbinbin 发表于 2015-8-25 15:34
#include
#define N 15
int main ()

恩   好思路   赞
回复 使用道具 举报
tr2e 中级黑马 2015-8-25 21:54:26
7#
iphone 发表于 2015-8-25 17:12
可以的    因为如果不是15的话   可以方便改数字,提取代码而已

为什么 vc 运行报错 你上个运行图
回复 使用道具 举报
#include <stdio.h>
int main()
{
    int n, m, i, s = 0;
    for (i = 2; i <= 15; i++)
    {
        s = (s + 3) % i;
    }
    printf ("\n 叛徒的原来的编号是 %d\n", s+1);
}

告诉你一个更简单的方法!
回复 使用道具 举报
iphone 中级黑马 2015-8-26 00:44:47
9#
tr2e 发表于 2015-8-25 21:54
为什么 vc 运行报错 你上个运行图

我用的xcode
回复 使用道具 举报
huayu 中级黑马 2015-8-26 11:09:49
10#

xcode运行没问题,vc6.0好多问题,运行了几个都是不能执行。没有xcode完美
回复 使用道具 举报
huayu 发表于 2015-8-26 11:09
xcode运行没问题,vc6.0好多问题,运行了几个都是不能执行。没有xcode完美

那就用xcode呗
回复 使用道具 举报
s思路不同。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马