黑马程序员技术交流社区

标题: 【基础测试 十】 [打印本页]

作者: 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