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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© gaozp 中级黑马   /  2015-10-13 14:44  /  1485 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*10、 耶稣有15个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:15人围坐一圈,从第一个开始报号:1,2,3,1,2,3……,凡是报到“3”就退出圈子,最后留在圈内的人就是出卖耶稣的叛徒,请找出它原来的序号。(C语言)*/
#include <stdio.h>
void main()
{
        /*定义一个数组people[15],并定义计数器count
        利用循环剔除每次count=3的一个人,并且重新归零,人数减少一个
        当“person=1”的时候,也就是剩下的最后一个人*/
        //定义数组people
    int people[15] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};  
    //定义计数器
    int count = 0;
    int i=0;
    int person=15;
   
    while(){
            if(people[i]!=0){
                    count++;
            }
            if(count==3){
                    //利用循环剔除每次count=3的人
                    count=0;
                    perpson--;
                    }
            }
   
}



这个问题我只做到了这步,在向下就不知道怎么进行了,求大神指点

4 个回复

倒序浏览
//利用循环剔除每次count=3的人,这里不要删除,你要是删除就是动态数组长度了,不好控制,你可以把这个写成:people[i]=0;对了,外面还要套一个for循环啊,要不你的i一直是0,最后再加一个if判断非零元素个数,如果只剩一个非零元素,记下非零元素位置,跳出循环。打印那个非零元素就行了。
回复 使用道具 举报
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 3
#define N 15
#include<stdio.h>

int main(){
//
    //定义一个数组保存人数
    int person[N]={0};
    //定义n保存剩余人数,最开始为15,
    int n=N;
    //定义i用来保存到数到3,把数组中的值赋值为1;定义j来确定数组的下标
    int i=1,j=0;
    //做循环当剩余一个人停止循环
    while (n>1) {
        //判断当数组中的值为0,且i不为3,i++
        if (person[j%N]==0&&i!=M)  i++;
        //判断当数组中的值为0,且i为3,把数组中的元素赋值为1,且剩余人数减少1个
        else if (person[j%N]==0&&i==M) {
            i=1;
            n--;
            person[j%N]=1;
        }
        //用来遍历数组中的每个元素
        j++;
    }
    //做循环来判断数组中为0的元素就是剩下最后的一个人
    for (int i=0; i<N; i++) {
        if (person[i]==0) {
            printf("出卖耶稣的人原来的序号是:%d号\n",i+1);
        }
    }
   
          return 0;
          }
回复 使用道具 举报
不懂的直接私密我!
回复 使用道具 举报
好像都有人发了出来了!@!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马