黑马程序员技术交流社区

标题: 耶稣有15个门徒,其中有一个就是出卖耶稣的叛徒,请用排... [打印本页]

作者: iphone    时间: 2015-8-25 14:21
标题: 耶稣有15个门徒,其中有一个就是出卖耶稣的叛徒,请用排...
#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;
}
这个比较精简,,你们怎么看



作者: tr2e    时间: 2015-8-25 14:41
你运行过?
作者: tr2e    时间: 2015-8-25 14:44
    int num = 15;

    int a[num], b[num];

这样能通吗?
作者: tangbinbin    时间: 2015-8-25 15:34

#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;       

}
看看我的这个,一起学习下
作者: iphone    时间: 2015-8-25 17:12
tr2e 发表于 2015-8-25 14:44
int num = 15;

    int a[num], b[num];

可以的    因为如果不是15的话   可以方便改数字,提取代码而已
作者: iphone    时间: 2015-8-25 17:18
tangbinbin 发表于 2015-8-25 15:34
#include
#define N 15
int main ()

恩   好思路   赞
作者: tr2e    时间: 2015-8-25 21:54
iphone 发表于 2015-8-25 17:12
可以的    因为如果不是15的话   可以方便改数字,提取代码而已

为什么 vc 运行报错 你上个运行图
作者: 小腼腆不是错    时间: 2015-8-25 22:01
#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
tr2e 发表于 2015-8-25 21:54
为什么 vc 运行报错 你上个运行图

我用的xcode
作者: huayu    时间: 2015-8-26 11:09

xcode运行没问题,vc6.0好多问题,运行了几个都是不能执行。没有xcode完美
作者: iphone    时间: 2015-8-26 12:10
huayu 发表于 2015-8-26 11:09
xcode运行没问题,vc6.0好多问题,运行了几个都是不能执行。没有xcode完美

那就用xcode呗
作者: to_love    时间: 2015-8-26 16:48
s思路不同。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2