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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© haha92210 中级黑马   /  2014-11-13 10:29  /  1327 人查看  /  3 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

感觉逻辑没有问题阿 为什么结果是14呢
#import <Foundation/Foundation.h>
int main()
{
    /*
     遍历15个人,从第一个人开始,经过1个人,m++,当m=3时候 menTu[i]=0,n=n-1,m=1,即排除
     ,之后并判断n==1:=1-输出 ,,当i=15的时候令i=1 ,
     遍历之前要判断menTu[i]==1,若等于 i++,不等于 m++
*/
    int n=15,i,m=0;                                     //n是剩余人的数量 i是门徒编号 m是标记的1 2 3
    int menTu[15];                                      //需初始化0   数组内存的0代表未排除嫌疑 1代表已排除
   
    for (i=1; i<=15; i++)                               //遍历所有人
    {
        if (menTu[i]==1)                                //判断menTu[i]是否被排除
        {
            i++;
        }
        else
        {
            m++;
            if (m==3)                                   //判断m==3
            {
                menTu[i]=1;
                n--;
                m=1;
                if (n==1)                               //判断当剩一个人时候输出叛徒 即n=1时输出叛徒
                {
                    printf("输出叛徒%d",i);
                }
            }
        }
        if (i>=15)                                      //每当门徒>=15是循环回到menTu[1];
        {
            i=1;
        }
    }
}

评分

参与人数 1技术分 +1 收起 理由
星河鹭起 + 1

查看全部评分

3 个回复

倒序浏览
感谢版主加分 可是  大神们阿  谁能帮我解答下阿   跪求
回复 使用道具 举报
看着没啥问题,但又总觉得不对呢。

先说一个问题,mentu[]数组的标号是从0开始,你i初始化值为1 那你数组直接从第二位开始遍历,所以结果肯定是错误的

我说下我做题时的思路,你参考下。
定义数组,并把数组赋值为0,在判断的时候用双判断,就是mentu[i] == 0 && m != 3 m++ 和 mentu[i] == 0 % && m == 3 把数组内当前位置行赋值为1 m=1 n--,最后用遍历输出,如果当前标号 mentu[i] == 0,输出i就是叛徒
回复 使用道具 举报
monterr 发表于 2014-11-13 14:46
看着没啥问题,但又总觉得不对呢。

先说一个问题,mentu[]数组的标号是从0开始,你i初始化值为1 那你数组 ...

谢谢谢谢  我再改改  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马