第二届南晓程序设计竞赛新年赛-外网dalao狂欢
个人总结
问题 A: 集训队日常之JBB的烦恼
时间限制: 1 Sec
内存限制: 32 MB
提交: 402
解决: 235
题目描述
JBB一直有个大大的烦恼。她总是认为自己的才能适合行政工作,不适合写代码,不敢考卓工班。但是又怕跟BigBaiZhou说了以后会收到鄙视*999.
其实BigBaiZhou什么都知道。为了给JBB增强自信,给她出了一道简单题。做出来这道题后,JBB顺利考上卓工班。
所谓乱世出英雄。在BigBaiZhou住院的时候,以JBB为首的一票人成功的完成了JSCPC的筹备工作,还创造历史拿了银。
多么正能量的故事。
所以请你也来做做这道简单题
我们把只有0和1组成的字符串叫做比特字符串。如果比特字符串中1的个数为奇数,则称这个比特字符串是奇性的。如果比特字符串中1的个数为偶数,则称这个比特字符串是偶性的。
注意:
(1)0是偶数,所以不包含1的比特字符串是偶性的。
(2)0的个数不影响比特字符串的奇偶性。
输入
输入包含多组测试数据。每组数据由1~31个0、1组成,最后跟一个小写字母e或o,e表示此比特字符串应为偶性,o表示此比特字符串应为奇性。
当输入#时,表示输入结束。
输出
每组输入对应一个输出,你应该将最后的字母替换成0或1,使得此比特字符串符合输入时确定的奇偶性。
样例输入
101e
010010o
1e
000e
110100101o
#
样例输出
1010
0100101
11
0000
1101001010
#include<stdio.h> int main() { char a[50]; char c,b; int i,m=0,n,p; while(scanf(" %c",&a[0])!=EOF) { if(a[0]=='1') m++; else if(a[0]=='e'||a[0]=='o') { if(a[0]=='e') printf("0"); else printf("1"); continue; } if(a[0]=='#') break; for(p=1;p<=32;p++) { scanf("%c",&a[p]); if(a[p]=='1') m++; if(a[p]=='o'||a[p]=='e') break; } if(m%2==0) { if(a[p]=='e') a[p]='0'; else a[p]='1'; } else { if(a[p]=='e') a[p]='1'; else a[p]='0'; } a[p+1]=0; puts(a); m=0; } return 0; }
题目的思路很简单,但我在做此题时仍然修改了很多地方。
第一点:脑子不知道怎么想的,将题目中的字符串给拆成第一个字符和后面的字符两部分。所以将第一个字符送入缓冲区后使用的getchar打乱了整个输入,导致程序错误。
第二点:puts函数本身就会输出换行,我却又多写了一个putchar('\n'),导致格式不对。
平常做题的时候脑子转的快一些,不要因为这种事冷费时间。