黑马程序员技术交流社区
标题: 【基础测试 十】 [打印本页]
作者: black747521 时间: 2015-11-9 16:17
标题: 【基础测试 十】
//
// main.c
// 测试题 10
// 10、 耶稣有15个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:15人围坐一圈,从第一个开始报号:1,2,3,1,2,3……,凡是报到“3”就退出圈子,最后留在圈内的人就是出卖耶稣的叛徒,请找出它原来的序号。(C语言)
// Created by black on 15/11/2.
// Copyright © 2015年 black. All rights reserved.
//
#include <stdio.h>
int search_traitor(int arr[]);// 函数声明
void print_arr(int arr[]);//用来遍历打印数组
void print_arr(int arr[]){
for (int i=0; i<15; i++) {
printf("%d",arr);
}
printf("\n");
}
int search_traitor(int arr[]){
//定义变量
int left = 15,count = 1,traitor = -1;
//定义算法
//十五个人依次循环,arr为0时,count++
//当count等于3时,令当前arr[]为1,且count重新置1,left--
//当left为1时,说明只剩下一个门徒,找到为0的数组元素,则该门徒即为叛徒
while (1) {
for (int i=0; i<15; i++) {
if (0 == arr && 3 != count) {
count++;
}
else if (3 == count && 0 ==arr){
arr = 1;
count = 1;
left--;
}
}
//判断是否剩余一人,如果是,找到该门徒
if (1 == left) {
for (int i=0; i<15; i++) {
if (0 == arr) {
traitor = i+1;
}
}
break;
}
// print_arr(arr);
}
return traitor;
}
int main(int argc, const char * argv[]) {
//定义门徒数组follower,门徒序号i
int follower[15]={0},i;
i = search_traitor(follower);
printf("出卖耶稣的叛徒的序号为%d\n",i);
print_arr(follower);
return 0;
}
| 欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |