我正在解决我在CodeChef上发现的问题 -
一个地区有一个村庄。有两种部落A和B驻留在那里。一个村庄可以是空的,也可以被其中一个部落占领。据说一个空村庄由A村的一个部落控制,如果它被左边和右边的部落A村包围。部落B也是如此。
分别找出受部落A和B控制的村庄数量。
输入
输入的第一行包含一个整数T,表示测试用例的数量。
输入的第一行包含一个字符串s,表示村庄的配置,每个村庄的字符可以是“A”,“B”或“。”。
输出
对于每个测试用例,输出两个空格分隔的整数,分别表示由部落A和B控制的部落数量。
实施例
输入
4 A..A..B。B ..一个.. 一个....一个 ..B..B..B ..
输出
4 5 1 0 6 0 0 7
这是我的代码 -
import java.util.Scanner;
class Villages_and_Tribes {
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
System.out.println("Enter: ");
int T = sc.nextInt();
while(T-->0)
{
String s = sc.nextLine();
Villages_and_Tribes obj = new Villages_and_Tribes();
obj.Count_Villages(s);
}
}
public void Count_Villages(String s)
{
int l = s.length();
int A=0, B=0;
for(int i=0; i<l; i++)
{
char c = s.charAt(i);
if(c=='A')
A++;
else if(c=='B')
B++;
else
{
boolean flagA1 = false, flagB1 = false, flagA2 = false, flagB2 = false;
for(int j=i+1; j<l; j++)
{
char x = s.charAt(j);
if(x=='A')
{
flagA1 = true;
break;
}
if(x=='B')
{
flagB1 = true;
break;
}
}
for(int k=i-1; k>=0; k--)
{
char x = s.charAt(k);
if(x=='A')
{
flagA2 = true;
break;
}
if(x=='B')
{
flagB2 = true;
break;
}
}
if(flagA1==true && flagA2==true)
A++;
else if(flagB1==true && flagB2==true)
B++;
}
}
System.out.println(A + " " + B);
}
}
这是我的输出 -
输入:
4
0 0
... A..A..B乙
4 5
.. ..甲
1 0
一个.... A
6 0
如您所见,T = 1的输出为“0 0”。所以,如果我想要四个输入和四个相应的输出,我需要输入T作为5而不是4.
有人可以告诉我为什么会这样吗?我非常感谢你的帮助。
编辑:
我的问题被标记为重复,但我将T--更改为T,然后使用T = T-1将其减少,以便完全避免使用减量运算符。但是,我得到了和以前一样的结果。我很确定错误不是由于操作员的使用。