题目链接:http://www.bnuoj.com/v3/contest_show.php?cid=6188#problem/A
A:水题。题意很清楚。
代码如下:
1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 using namespace std; 5 char s[10000]; 6 int main() 7 { 8 int t; 9 scanf ("%d",&t); 10 while (t--) 11 { 12 scanf ("%s",s); 13 int sum=0; 14 int i,j,k=0; 15 for(i=0;i<strlen(s);i++) 16 { 17 if(s[i]=='O') 18 { 19 sum+=k+1; 20 k++; 21 } 22 else 23 k=0; 24 } 25 printf("%d ",sum); 26 } 27 return 0; 28 }
B:Molar mass
大致题意:计算给出分子式的相对分子质量。重点是对字符串的处理。
代码:
1 #include <cstdio> 2 #include <iostream> 3 #include <cstring> 4 using namespace std; 5 6 char s[1000]; 7 int main() 8 { 9 int t; 10 scanf ("%d",&t); 11 while (t--) 12 { 13 double sum=0; 14 scanf ("%s",s); 15 int len=strlen(s); 16 if(len==1)//这里对只有一个元素的分子式的一个小处理。 17 { 18 strcat(s,"1"); 19 len++; 20 } 21 //printf("%s ",s); 22 for(int i=0;i<=len;) 23 { 24 int x=0; 25 int j=i+1; 26 while (s[j]<='9'&&s[j]>='0') 27 { 28 x=x*10+s[j]-'0'; 29 j++; 30 }//找到所含原子的个数。 31 if(j==i+1)如果j的值并为改变,说明该原子数量为1. 32 x=1; 33 if(s[i]=='C') 34 sum+=x*12.01; 35 else if(s[i]=='H') 36 sum+=x*1.008; 37 else if(s[i]=='N') 38 sum+=x*14.01; 39 else if(s[i]=='O') 40 sum+=x*16.00; 41 i=j; 42 } 43 printf("%.3lf ",sum); 44 } 45 return 0; 46 }
C:Digit Counting
大致题意:计算1~n这些数里0~9这10个数字出现的次数。水水水!
代码:
1 #include <cstdio> 2 #include <cstring> 3 int main() 4 { 5 int t; 6 scanf ("%d",&t); 7 while (t--) 8 { 9 int a[10]; 10 memset(a,0,sizeof(a)); 11 int n; 12 scanf ("%d",&n); 13 for(int i=1;i<=n;i++) 14 { 15 int temp=i; 16 while (temp) 17 { 18 a[temp%10]++; 19 temp/=10; 20 } 21 } 22 for(int i=0;i<10;i++) 23 printf("%d ",a[i]); 24 printf(" "); 25 } 26 return 0; 27 }
D:periodic strings
大致题意:一个字符串又多个循环节组成。我们需要做的是找出里面长度最小的循环节并输出。
我用的是kmp算法。其实这么小的数据量枚举就可以处理。
代码:
1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 using namespace std; 5 6 char s[10000]; 7 int next[10000]; 8 void getnext() 9 { 10 next[0]=-1; 11 int k=-1,j=0; 12 int len=strlen(s); 13 while (j<len) 14 { 15 if(k==-1||s[j]==s[k]) 16 { 17 j++; 18 k++; 19 if(s[j]!=s[k]) 20 next[j]=k; 21 else 22 next[j]=next[k]; 23 } 24 else 25 k=next[k]; 26 } 27 } 28 int main() 29 { 30 int t; 31 scanf ("%d",&t); 32 while(t--) 33 { 34 scanf ("%s",s); 35 memset(next,0,sizeof(next)); 36 getnext(); 37 int len=strlen(s); 38 if(len%(len-next[len])==0) 39 printf("%d ",len-next[len]); 40 else 41 printf("%d ",len); 42 if(t) 43 printf(" "); 44 } 45 return 0; 46 }
E:Puzzle
大致题意:一个5X5的矩阵,里面放了24个字母和一个空格。现在对这个空格有交换A上B下L左R右四种操作。
现在给出这样的矩阵和若干操作,打印出操作后的矩阵。
这题难度在于字符的读入与读出。真的好麻烦。代码没有A,不过样例过了,以后更新。
代码如下:
1 #include <cstdio> 2 #include <cstring> 3 4 char s[100][100]; 5 int x,y,temp; 6 int ok(int xx,int yy) 7 { 8 if(xx<5&&xx>=0&&yy<5&&yy>=0) 9 return 1; 10 else 11 return 0; 12 } 13 void change(int xx,int yy,char c)//改变字符的操作。。 14 { 15 if(c=='A') 16 { 17 if(ok(xx-1,yy)) 18 { 19 s[xx][yy]=s[xx-1][yy]; 20 x=xx-1; 21 }else 22 { 23 temp=1; 24 return ; 25 } 26 }else if(c=='R') 27 { 28 if(ok(xx,yy+1)) 29 { 30 s[xx][yy]=s[xx][yy+1]; 31 y=yy+1; 32 }else 33 { 34 temp=1; 35 return ; 36 } 37 }else if(c=='B') 38 { 39 if(ok(xx+1,yy)) 40 { 41 s[xx][yy]=s[xx+1][yy]; 42 x=xx+1; 43 }else 44 { 45 temp=1; 46 return ; 47 } 48 }else if(c=='L') 49 { 50 if(ok(xx,yy-1)) 51 { 52 s[xx][yy]=s[xx][yy-1]; 53 y=yy-1; 54 }else 55 { 56 temp=1; 57 return ; 58 } 59 } 60 } 61 int main() 62 { 63 int t=0; 64 while (1) 65 { 66 int num=0; 67 for(int i=0;i<5;i++) 68 { 69 gets(s[i]); 70 if(strlen(s[i])==1) 71 { 72 num=1; 73 break; 74 } 75 } 76 if(num)//读入一个字符Z的时候结束程序。 77 break; 78 for(int i=0;i<5;i++) 79 { 80 int flag=0; 81 for(int j=0;j<5;j++) 82 { 83 if(s[i][j]==' ') 84 { 85 x=i,y=j; 86 flag=1; 87 break; 88 } 89 } 90 if(flag) 91 break; 92 }//找到属于空格的坐标。 93 //printf("%d %d ",x,y); 94 char c; 95 temp=0; 96 while (1) 97 { 98 scanf ("%c",&c); 99 if(c=='0') 100 break; 101 if(c==' ') 102 continue; 103 change(x,y,c);//读入对空格的操作。因为操作可能有两行。所以需要处理。 104 } 105 printf("Puzzle #%d: ",++t);//实例的个数 106 s[x][y]=' '; 107 if(temp==0) 108 for(int i=0;i<5;i++) 109 { 110 for(int j=0;j<5;j++) 111 { 112 if(j==4) 113 printf("%c",s[i][j]); 114 else 115 printf("%c ",s[i][j]); 116 } 117 printf(" "); 118 } 119 else 120 printf("This puzzle has no final configuration. "); 121 printf(" "); 122 gets(s[0]);//这里其实我也有疑问??不过为什么必须在循环结束读入s[0].如果有大神看到,求告知。日后修改A了的代码。 123 } 124 return 0; 125 }
F:Crossword Answered
大致题意:这题就是一个坑的填字游戏!!!!
没有写