PAT A1035 Password 三个经验仔细看!

来源:互联网 发布:始作俑者其无后乎意思 编辑:程序博客网 时间:2024/05/02 04:20
//经验1:如果遇到20分的题,有5分两个点没有通过,不要担心,细心一点复查,仔细对输入输出;仔细考虑特殊情况,你可以的,不要慌 //经验2:if else语句还是写完整,每种情况不要偷懒//经验3:测试每一个给出的点,每个测试点都值很多分。与其多做,不如把一题分拿满。考虑周全就好了的。最后一个3分没通过的点,通过调试了最后一个给出的case,发现多输出了0,于是才知道自己if else考虑不严密 //第一次提交,因为1的那个情况没有把复数的s去掉,没有把are变成is,丢了分//上面的通过了,还有一个3分的点//ac了 #include<stdio.h>#include<string.h>#define LOCALstruct user{char uname[15];char upwd[15];}T[1010],temp;int main(){//使用结构体,边读入边输出?所以只打算用一个结构体就好?好像不是哎,要输出改了多少个的 #ifdef LOCALfreopen("A1035data.in","r",stdin);freopen("A1035data.out","w",stdout);#endifint n,num=0,tlen,flag;//好像num和count重复了,算了不改了 scanf("%d",&n);int mm=n;while(n--){//对一个用户处理 tlen=0;flag=0;//如果等于-1表示更改过了,存到T[1010]中,num++.flag的位置并没有错吧 scanf("%s %s",temp.uname,temp.upwd);tlen=strlen(temp.upwd);for(int i=0;i<tlen;i++){switch(temp.upwd[i]){ case '1':{//数字1,要改为@ temp.upwd[i]='@';flag=-1;break;}case 'l':{//字母l,要改为L temp.upwd[i]='L';flag=-1;break;}case '0':{//数字0,改为% temp.upwd[i]='%';flag=-1;break;}case 'O':{//字母O,改为o temp.upwd[i]='o';flag=-1;break;}}}//如果flag=-1,说明有更改,把这个存放到T中if(flag==-1){T[num++]=temp;//count++;} }if(num==0&&mm>=2){printf("There are %d accounts and no account is modified\n",mm);}if(num==0&&mm==1){printf("There is 1 account and no account is modified\n");}else if(num!=0){//之前写的else{}.其实else是包括num==0的! printf("%d\n",num);for(int i=0;i<num;i++){printf("%s %s\n",T[i].uname,T[i].upwd);}}return 0;}/*//关于sprintf的使用,再简单的case你也应该调试一下 int main(){int n=1234;char str[5];sprintf(str,"%d",n);//把n以%d的形式写到str[]中 //for(int i=0;i<5;i++){printf("%c",str[3]);//4 printf("%s",str); return 0; }  *//*3Team0000002 Rlsp0dfaTeam0000003 perfectpwdTeam0000001 R1spOdfa*/

0 0