训练赛bug总结

先说最后出的模拟题 RE一发 因为没去掉freopen

 1 #include<cstdio>
 2 #include<map>
 3 #include<iostream>
 4 #include<string>
 5 #define debug(a) cerr<<#a<<"=="<<a<<endl
 6 using namespace std;
 7 
 8 map<pair<string,string>,bool>mp;
 9 map<pair<string,string>,bool>vis;
10 
11 char s[1005];
12 
13 int main()
14 {
15     mp.clear(),vis.clear();
16     string str;
17 ///    一定要把freopen去掉
18 ///    freopen("in.txt","r",stdin);
19     while(gets(s))
20     {
21         int i=0;
22         string name1,name2;
23         for(;s[i]!='-';i++)
24             name1+=s[i];
25         i+=2;
26         for(;s[i]!=':';i++)
27             name2+=s[i];
28 //        debug(name1),debug(name2);
29         i++;
30         bool l=false;
31         while(s[i])
32         {
33             bool ok=true;
34             string tmp("");
35             for(;s[i]>='a'&&s[i]<='z' ||s[i]>='A'&&s[i]<='Z' ;i++)
36                 if(s[i]>='A'&&s[i]<='Z')tmp+=s[i]+32;
37                 else tmp+=s[i];
38             if(tmp.find("hehe")!=-1)
39             {
40                 int len=tmp.size();
41                 for(int j=0;j<len;j++)
42                 {
43                     if(j%2==1 && tmp[j]!='e') ok=false;
44                     if(j%2==0 && tmp[j]!='h') ok=false;
45                 }
46             }
47             else ok=false;
48             if(ok) {l=true;break;}
49             i++;
50         }
51         if(name1>name2) swap(name1,name2);
52         pair<string,string> tmp;
53         tmp=make_pair(name1,name2);
54         mp[tmp]=l;
55 //        debug(l);
56     }
57     double ans=0;
58     map<pair<string,string>,bool>::iterator iter=mp.begin();
59     for(; iter!=mp.end(); iter++)
60     {
61         if( iter->second == true) ans+=1.0;
62     }
63 //    debug(ans);
64     ans=((1.0*ans/mp.size())*100);
65     printf("%.0f%%
",ans);
66     return 0;
67 }/*
68 
69 A->B: Hello!
70 A->C: Hi!
71 B->A: Hehe
72 B->D: Hei!
73 D->B: How are you?
74 A->C: Hi???
75 A->C: Are you there?
76 B->D: Hehehei!
77 D->B: What does hehehei mean?
78 F->E: I want to hehehehehe yah.
79 
80 */

然后说最先出的水题 没打case 老毛病= =

 1 #include<cstdio>
 2 
 3 const int maxn=1e5+10;
 4 
 5 long long num[maxn];
 6 int tot;
 7 
 8 void init()
 9 {
10     int i=0;
11     while(i*i<maxn)
12     {
13         num[i]=0;
14         num[i]=1ll*i*i;
15         i++;
16     }
17     tot=i;
18 }
19 
20 int main()
21 {
22     ///别忘了打case
23     int T,cas=1;
24     scanf("%d",&T);
25     init();
26     while(T--)
27     {
28         int ans=0;
29         char str[5];
30         scanf("%s",str);
31         int a[5];
32         a[0]=str[0]-'0',a[1]=str[1]-'0',a[2]=str[2]-'0',a[3]=str[3]-'0';
33 //        printf("%d %d %d %d
",a[0],a[1],a[2],a[3]);
34         for(int i=1;i<=9;i++)
35         {
36             if(a[0]==i) continue;
37             int number=i*1000+a[1]*100+a[2]*10+a[3];
38 //            printf("%d
",number);
39             for(int i=0;i<tot;i++)
40             {
41                 if(num[i]==number) ans++;
42             }
43         }
44         for(int i=0;i<=9;i++)
45         {
46             if(a[1]==i) continue;
47             int number=a[0]*1000+i*100+a[2]*10+a[3];
48 
49             for(int i=0;i<tot;i++)
50             {
51                 if(num[i]==number) ans++;
52             }
53         }
54         for(int i=0;i<=9;i++)
55         {
56             if(a[2]==i) continue;
57             int number=a[0]*1000+a[1]*100+i*10+a[3];
58             for(int i=0;i<tot;i++)
59             {
60                 if(num[i]==number) ans++;
61             }
62         }
63         for(int i=0;i<=9;i++)
64         {
65             if(a[3]==i) continue;
66             int number=a[0]*1000+a[1]*100+a[2]*10+i;
67             for(int i=0;i<tot;i++)
68             {
69                 if(num[i]==number) ans++;
70             }
71         }
72         ///别忘了打case!
73         printf("Case %d: %d
",cas++,ans);
74     }
75     return 0;
76 }/*
77 
78 2
79 7844
80 9121
81 
82 */

然后就是代码不严谨的问题 已经判断出结果了 就不用走接下来的循环了 注意设计极端样例

 1 #include<cstdio>
 2 #include<cstring>
 3 
 4 const int maxn=1e5+10;
 5 
 6 long long num[maxn];
 7 int tot;
 8 
 9 char str[105],str1[105];
10 
11 int main()
12 {
13     int T,cas=1;
14     while(~scanf("%s",str))
15     {
16         printf("Case %d: ",cas++);
17         scanf("%s",str1);
18         int loc=strstr(str,".")-str;
19         int loc1=strstr(str1,".")-str1;
20 //        printf("==%d
",loc);
21 //        int i=strlen(str);
22 //        while(true)
23 //        {
24 //            if(str[i]=='')
25 //            if(str[i-1]!='0')
26 //            {
27 //                str[i]='';
28 //                break;
29 //            }
30 //            i++;
31 //        }
32         if(loc>loc1)
33         {
34             printf("Bigger
");
35         }
36         else if(loc<loc1)
37         {
38             printf("Smaller
");
39         }
40         else
41         {
42             int same=true;
43             int len=strlen(str)<strlen(str1)?strlen(str):strlen(str1);
44             for(int i=0;i<len;i++)
45             {
46                 if(str[i]=='.') continue;
47                 if(str[i]>str1[i])
48                 {
49                     printf("Bigger
");
50                     same=false;
51                     break;
52                 }
53                 if(str[i]<str1[i])
54                 {
55                     printf("Smaller
");
56                     same=false;
57                     break;
58                 }
59             }
60             
61             ///判断出结果了其他循环就不要跑了
62             if(same==false) continue;
63             ///注意及时跳出
64             
65             if(strlen(str)==len)
66             {
67                 int len1=strlen(str1);
68                 for(int i=len;i<len1;i++)
69                 {
70                     if(str1[i]!='0') {printf("Smaller
");same=false;}
71                 }
72             }
73             else
74             {
75                 int len1=strlen(str);
76                 for(int i=len;i<len1;i++)
77                 {
78                     if(str[i]!='0') {printf("Bigger
");same=false;}
79                 }
80             }
81             if(same) printf("Same
");
82         }
83     }
84     return 0;
85 }/*
86 
87 1.0 2.0
88 0.00001 0.00000
89 0.0 0.000
90 
91 */
原文地址:https://www.cnblogs.com/general10/p/6806296.html