| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2794 人关注过本帖, 1 人收藏
标题:求助各位大神指点迷津蓝桥杯蚂蚁感冒问题
取消只看楼主 加入收藏
Emmaer123
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2019-9-20
结帖率:66.67%
收藏(1)
 问题点数:0 回复次数:4 
求助各位大神指点迷津蓝桥杯蚂蚁感冒问题
长100厘米的细长直杆子上有n只蚂蚁。它们的头有的朝左,有的朝右。
每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。
当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。
这些蚂蚁中,有1只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。
请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。
输入
第一行输入一个整数n  (1  <   n  <   50),  表示蚂蚁的总数。
接着的一行是n个用空格分开的整数  Xi  (-100  <   Xi  <   100),  Xi的绝对值,表示蚂蚁离开杆子左边端点的距离。正值表示头朝右,负值表示头朝左,数据中不会出现0值,也不会出现两只蚂蚁占用同一位置。其中,第一个数  据代表的蚂蚁感冒了。
输出
要求输出1个整数,表示最后感冒蚂蚁的数目。
样例输入
5
-10  8  -20  12  25
样例输出
3


//思路:若满足 相邻的两个数组 第一个大于零第二个小于零 的条件  那么这两个会相撞  所以检查数组中每两个相邻元素  
#include <stdio.h>
int main()
{
    int i,n,flag,count=0;
    char a[1000]={0};char b[1000]={1}; //b[i]=0记录第i只蚂蚁没感染,由题意可知b[0]=1即第一个元素为感染蚂蚁
   
    scanf("%d",&n);
    for (i=0;i<n;i++)  { scanf("%s",&a[i]);}
   
    do
       {
            flag=0;
         for(i=0;i<n-1;i++)
          {
            if(a[i]>0&&a[i+1]<0)     
            {// 如检查到符合的情况,将这两个元素a[i]、a[i+1]分别变成各自的相反数
                a[i]=0-a[i];
                a[i+1]=0-a[i+1];
                i++;// i++是为了跳过a[i+1],从而在下一次循环检查a[i+2]和a[i+3]正负
                if(b[i+1]!=b[i])   //若相邻两只蚂蚁中有一只感染
                {
                    b[i+1]=1;b[i]=1;  //将两只都记录为感染   
                    count++;
                }
                flag=1;
            }
             }
       }
    while(flag=1);  // 每从i=0循环至i=n-1完,检查flag,当flag=0说明没有相邻的元素满足条件,不会有蚂蚁感染了,于是跳出循环
   
    printf("%d",count);
    return 0;
 }
 
跪求为啥编译不出来,不知道思路哪里错了,求路过大神指点一下我的思路错在哪里
我的思路是:若满足 相邻的两个数组元素第一个大于0第二个小于0的条件  那么这两个会相撞 ,当检测到满足条件的两个元素时,改变各自正负(因为由题意遇到会返回回头) ,并且如果其中只有一个感冒,感冒蚂蚁的个数加一,如此循环,直到检测不到满足条件的元素,说明以后不会有相撞的蚂蚁

[此贴子已经被作者于2019-10-15 21:47编辑过]

搜索更多相关主题的帖子: 条件 flag 表示 元素 相邻 表示 flag 条件 元素 相邻 
2019-10-14 23:04
Emmaer123
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2019-9-20
收藏
得分:0 
回复 2楼 rjsp
应该是只要是被感染过的蚂蚁碰到其他蚂蚁就可以感染
2019-10-15 12:56
Emmaer123
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2019-9-20
收藏
得分:0 
回复 4楼 rjsp
我试了一下,结果正确,但我还是不明白我的思路错在哪里了
2019-10-15 16:46
Emmaer123
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2019-9-20
收藏
得分:0 
回复 7楼 自学的数学
请大佬能不能指点下我的思路错在哪里呢?我想了很长时间,就是想不明白,太痛苦了。
我的思路是:若满足 相邻的两个数组元素第一个大于0第二个小于0的条件  那么这两个会相撞 ,当检测到满足条件的两个元素时,改变各自正负(因为由题意遇到会返回回头) ,并且如果其中只有一个感冒,感冒蚂蚁的个数加一,如此循环,直到检测不到满足条件的元素,说明以后不会有相撞的蚂蚁,可是我把我的程序运行以后结果是错的,真的百思不得其解

[此贴子已经被作者于2019-10-15 21:57编辑过]

2019-10-15 21:49
Emmaer123
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2019-9-20
收藏
得分:0 
回复 9楼 自学的数学
其实我看过这个解法,也明白这个解法,这题有很多种思路,这次发帖主要是想弄明白自己的思路错在哪里,谢谢您花时间这么长的解释,但我现在还是非常困惑
2019-10-15 22:14
快速回复:求助各位大神指点迷津蓝桥杯蚂蚁感冒问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015252 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved