求助各位大神指点迷津蓝桥杯蚂蚁感冒问题
长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编辑过]