-
题目描述
假设你们社团要竞选社长,有两名候选人分别是A和B,社团每名同学必须并且只能投一票,最终得票多的人为社长. -
输入描述
一行,字符序列,包含A或B,输入以字符0结束。 -
输出描述
一行,一个字符,A或B或E,输出A表示A得票数多,输出B表示B得票数多,输出E表示二人得票数相等。
思路
首先我想到是用字符数组,但是输入的是连续字符串而且要判断以0结束,不知道怎么很好的判断结束
票数问题一般要有 各自的计数,这里两个人分别为a_count,b_count
循环输入,当scanf("%c",&ch) != EOF
(End Of File)就是文件读取还没有结束,不写不通过
分支判断,是否0跳出,票数加1
根据票数,输出相应的结果
- 思路1代码
# include<bits/stdc++.h>
using namespace std;
int main()
{
int a_count = 0 ,b_count = 0;
char ch = 0;
while(scanf("%c",&ch) != EOF){
if(ch == '0')
break;
if(ch == 'A')
a_count++;
if(ch == 'B')
b_count++;
}
if(a_count == b_count)
printf("E\n");
else if(a_count > b_count)
printf("A\n");
else
printf("B\n");
return 0;
}
- 思路2代码
利用字符数组
# include<bits/stdc++.h>
using namespace std;
int main()
{
//计数
int a_count = 0 ,b_count = 0;
//字符数组
//char stu[99];
char stu[99];
//读取全部输出的字符串
scanf("%s",stu);
//字符串的长度
int len = strlen(stu);
//循环计数,加票,判断是结束
for(int i = 0;i< len;++i){
if(stu[i] == 'A')
a_count++;
else if(stu[i] == 'B')
b_count++;
else
break;
}
//打印输出结果
if(a_count == b_count)
printf("E\n");
else if(a_count > b_count)
printf("A\n");
else
printf("B\n");
return 0;
}
- Python版代码
ll = list(input())
count_A = ll.count('A')
count_B = ll.count('B')
if count_A == count_B:
print('E')
elif count_A > count_B:
print('A')
else:
print('B')
拓展
//写法1
while ((ch = getchar()) != EOF && getchar() != '\n')
continue;
//写法2
while (getchar() != '\n')
continue;
这两种写法的区别
-
两种写法对于 换行符的过滤 效果是一样的,换行符输入,循环结束
-
读取多行,遇到换行符就结束循环,第一个多判断了文件尾
-
读取单行,第一个一直读到 文件尾 或 换行符;第二个一直读取到换行才结束,如果输入结束符EOF,第二种判断不会跳出循环