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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© black747521 中级黑马   /  2015-11-9 16:17  /  541 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//
//  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;
}


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马