黑马程序员技术交流社区
标题: 耶稣有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
可以的 因为如果不是15的话 可以方便改数字,提取代码而已
作者: iphone 时间: 2015-8-25 17:18
恩 好思路 赞
作者: tr2e 时间: 2015-8-25 21:54
为什么 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
我用的xcode
作者: huayu 时间: 2015-8-26 11:09
xcode运行没问题,vc6.0好多问题,运行了几个都是不能执行。没有xcode完美
作者: iphone 时间: 2015-8-26 12:10
那就用xcode呗
作者: to_love 时间: 2015-8-26 16:48
s思路不同。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |